我正在尝试删除我正在运行我的Python程序的目录中的某个文件.
def erase_custom_file():
directory=os.listdir(os.getcwd())
for somefile in directory:
if somefile=="file.csv":
os.remove(???)
Run Code Online (Sandbox Code Playgroud)
我不确定我的下一步应该是什么.我知道这os.remove需要一个参数的路径,但我不知道如何将它指向我想要的文件.请帮帮我?
我有一个PHP应用程序,我需要删除客户端文件.我怎样才能做到这一点?
我是PHP的新手.希望可以有人帮帮我.
我搜索了很多例子,但没有一个对我有用.我正在使用C#.
我的应用程序需要删除文件夹中的文件,仅在文件关闭时.
try-catch File.Open(...)方法仅适用于某些文件类型,如doc,xls,ppt,pdf,mp3等,但不适用于txt,zip,html等...
我用PHP生成一个*.csv文件,效果很好.问题是,它包含一堆敏感数据.我已经非常仔细地完成了我的权限,因此如果没有正确的用户,您将无法访问下载链接或生成文件.我遇到的问题是,在用户下载文件后,需要立即删除该文件.我意识到,机会很小,有人会坐在那里扫描我的网站结构,但数据非常重要,我想覆盖我的屁股:-)
我起初有这个:
<a href="<?php echo base_path().$ourFileName ?>"><?=$ourFileName?></a>
Run Code Online (Sandbox Code Playgroud)
这对于下载文件非常有用,但是我很难用它做任何动作,因为如果你将PHP代码嵌入OnClick =""中它将在点击发生之前执行,因为所有的PHP代码都是在处理HTML和JAVASCRIPT之前渲染服务器端......对吗?我搜索了互联网,似乎我没有得到javascript来删除文件的权限......诚然,我可能是非常错误的.
所以我把链接变成了一个表单:
<?PHP
if(isset($_POST['submit']))
{
header("Location: ".base_path().$ourFileName);
unlink(base_path().$ourFileName);
}?>
<form action="<? $PHP_SELF ?>" method="post">
<input type="submit" value="Submit" name="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
但显然,unlink()永远不会因为标题而被访问......至少我认为......除了header()还有另一种方法可以将文件下载到它们吗?我意识到我可以每分钟或者其他什么地运行一个cron工作而且只是:
rm -rf *.csv
Run Code Online (Sandbox Code Playgroud)
这将解决问题,但如果用户正在下载文件并且cron开始运行会发生什么?或者页面已生成,但由于某种原因,他们暂时没有点击链接?
也许有一些方法可以配置我的.htaccess文件,这样你只能在从页面链接时访问该文件?
我复杂化了吗?
互联网的任何想法大师?
--edit根据流行的建议,我正在研究新的标题格式,所以代码如下所示:
<?PHP if(isset($_POST['submit']) && ($user->uid))
{
myroom_render_csv($ourFileName, $csv_string);
}?>
<form action="<? $PHP_SELF ?>" method="post">
<input type="submit" value="Submit" name="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
并在一个单独的文件中:
<?PHP function myroom_render_csv($file_name, $csv_string) {
header('Content-type: text/csv');
$header_string2="Content-Disposition: attachment; filename=\"".$file_name."\"";
header($header_string2);
echo $csv_string;
} ?>
Run Code Online (Sandbox Code Playgroud)
但我获得了完整HTML页面和CSV数据的转储.想法?
我正在C#MVC应用程序中创建PDF发票,我附加到电子邮件并发送,理想情况下,一旦发送电子邮件,我想删除发票以释放服务器空间并提高隐私/安全性.我已编写代码来执行此操作,但它在50%的时间内失败,因为该文件被另一个进程锁定(我不确定是创建/写入进程是锁定它还是电子邮件发送).我正在异步发送电子邮件(即删除的代码在电子邮件发送之前不会执行).
我很欣赏一些如何处理这个问题的技巧.我可以找一份工作来清理旧文件,但我更愿意在我去的时候清理它们...
我忘了提到我正在使用iTextSharp生成PDF - 它的关键是这个代码用于生成最终发票(我能够删除作为参数传入的文件列表而不用戏剧):
/// <summary>
/// http://stackoverflow.com/questions/4276019/itextsharp-pdfcopy-use-examples
/// </summary>
/// <param name="fileNames"></param>
/// <param name="outFile"></param>
private void CombineMultiplePDFs(List<string> files, string outFile)
{
int pageOffset = 0;
int f = 0;
iTextSharp.text.Document document = null;
PdfCopy writer = null;
foreach (string file in files)
{
// we create a reader for a certain document
PdfReader reader = new PdfReader(file);
reader.ConsolidateNamedDestinations();
// we retrieve the total number of pages
int n = reader.NumberOfPages;
pageOffset += n;
if (f == 0) …Run Code Online (Sandbox Code Playgroud) 我有一个Java工具,可生成100,000多个文件,我随后在我的流程的"第2步"中使用.由于"第2步"的性质,我不希望任何文件> 1MB.这是我用来删除这些文件的代码:
File[] files = root.listFiles();
for (File file : files) {
if (file.isFile()) {
if (file.length > 1048576) { //size of MB
//delete the file
file.delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当文件数量相对较小时,这工作正常.但是,当n> 100,000时,由于内存限制,对listFiles()的调用会导致系统崩溃.我知道你可以根据文件类型过滤结果,但有没有办法根据文件大小来做?或者,是否有另一种方法,我可以轻松地根据文件大小进行大批量删除,不会崩溃我的系统?
FWIW,我正在运行RedHat 6.
在我的lotusscripy中我创建了一个外部文件,我在其中"打印"了一些行,我关闭它然后我用Shell函数运行它:
Open "D:\testF.dsx" For Output As fileNum%
Print #fileNum%, "line1"
Print #fileNum%, "line2"
Print #fileNum%, "line3"
Close fileNum%
result = Shell(|path "D:\testF.dsx"|, 1)
Run Code Online (Sandbox Code Playgroud)
shell函数运行正常,它正在运行的文件.
在此之后我就放了
Kill fileNum% 'which should delete the file
Run Code Online (Sandbox Code Playgroud)
另外,我试图添加
Sleep 2 'before the Kill statement but I get the same error: Path/file access error.
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间!
我创建一个.vbs文件(可以:创建文本文件->打开notepad.exe->删除上面的文件),如下所示:
' Create a new file
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.CreateTextFile("D:\Folder\Textfile.txt")
objFile.WriteLine ("sample text")
' Run a program and wait
WScript.CreateObject("WScript.Shell").Run "notepad.exe", 1, true
' Delete file
objFS.Deletefile("D:\Folder\Textfile.txt")
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,关闭记事本窗口后,它显示错误消息:
Line: 10
Char: 1
Error: Permission denied
Code: 800A0046
Source: Microsoft VBScript runtime error
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这个.vbs无法删除文本文件?感谢您的任何帮助!
这是我的PowerShell脚本:
$dir = ([io.fileinfo]$MyInvocation.MyCommand.Definition).DirectoryName
Get-ChildItem -Path .\ -Filter *.png -Recurse -File | Where-Object {$_.Name -match ".+[\]]+.png"} | ForEach-Object {
echo $_.FullName $(Test-Path $_.FullName)
Remove-Item $_
echo $_.FullName $(Test-Path $_.FullName)
}
Run Code Online (Sandbox Code Playgroud)
回声提供实际的文件名,但Test-Path解析为False,并且没有删除任何内容.
delete-file ×10
file ×3
c# ×2
php ×2
asp.net-mvc ×1
createfile ×1
denied ×1
download ×1
file-io ×1
html ×1
itextsharp ×1
java ×1
javascript ×1
lotus-notes ×1
permissions ×1
powershell ×1
python ×1
python-3.x ×1
windows ×1
windows-10 ×1