回答
procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFiles(ExtractFilePath(ParamStr(0)),'*.jpg');
end;
procedure DeleteFiles(APath, AFileSpec: string);
var
lSearchRec:TSearchRec;
lPath:string;
begin
lPath := IncludeTrailingPathDelimiter(APath);
if FindFirst(lPath+AFileSpec,faAnyFile,lSearchRec) = 0 then
begin
try
repeat
SysUtils.DeleteFile(lPath+lSearchRec.Name);
until SysUtils.FindNext(lSearchRec) <> 0;
finally
SysUtils.FindClose(lSearchRec); // Free resources on successful find
end;
end;
end;
(有没有必要fillchar的lsearchrec)所有 – 2009-06-12 20:46:10
您可以使用SHFileOperation功能。关于使用SHFileOperation的好处是,你必须将文件删除到回收站的选项,你会得到正常的API动画,这样用户就知道是怎么回事。缺点是删除将比Jeff的代码稍长一些。
有几种包装在那里。我使用了BP Software的这个免费包装。整个包装文件只有220行,易于阅读和使用。我不会将其作为组件安装。我发现将这个单元添加到我的项目中很简单,只需根据需要创建并释放对象。
更新:下载链接BP软件的网站不再有效。有一个older version on the Embarcadero website。
TSHFileOp(1.3.5.1)(3 KB) 31日,2006年
TComponent是一个包装 为SHFileOperation API复制, 移动,重命名或删除(有 回收斌支持
五月)文件系统 对象。
SHFileOperation的文件名参数支持MS DOS样式通配符。所以,你可以使用该组件是这样的:
FileOps := TSHFileOp.Create(self);
FileOps.FileList.Add(DirectoryName + '\*.jpg');
FileOps.HWNDHandle := self.Handle;
FileOps.Action := faDelete;
FileOps.SHOptions :=
[ofAllowUndo, ofNoConfirmation, ofFilesOnly, ofSimpleProgress];
FileOps.Execute;
我通常显示“你确定”的消息自己,所以我总是通过ofNoConfirmation标志,以便Windows不会再问。
如果你不想删除所有的JPG文件,或者您需要从多个目录中删除,你可以到文件列表中的字符串列表调用execute之前,外卡添加完整的文件名或不同的路径。
这是MSDN Page for SHFileOperation
请注意,SHFileOperation已被从Windows Vista开始的IFileOperation取代。我继续在Windows Vista上使用SHFileOperation,没有任何问题。
在较新版本的Delphi,你可能会使用在System.IOUtils
的类,它基本上包装FindFirst
,FindNext
等:
procedure DeleteFilesMatchingPattern(const Directory, Pattern: string);
var FileName: string;
begin
for FileName in TDirectory.GetFiles(Directory, Pattern) do TFile.Delete(FileName);
end;
- 1. 如何删除PHP中某个目录中匹配模式的文件?
- 2. 如何使用SVN删除所有匹配模式的目录?
- 3. 如何删除与phing中的模式匹配的文件夹
- 4. 通过模式匹配删除文件
- 5. Python Fabric - 删除匹配目录中带有空格的模式的文件?
- 6. 删除与时间模式匹配的目录中的所有文件
- 7. 如何从给定匹配项中删除匹配模式
- 8. 通配符模式匹配目录中的文件
- 9. 如何在命令行中匹配另一个模式的目录中找到匹配模式的文件?
- 10. 如何删除目录中的文件
- 11. 删除与iOS中的模式匹配的文件
- 12. 从M3U文件中删除多个不匹配模式的行
- 13. 如何删除当前目录中与给定模式不匹配的某些文件?
- 14. 递归列表匹配模式的目录中的文件
- 15. 在目录c#中查找匹配模式的文件?
- 16. 命令行递归删除匹配的文件和目录
- 17. 删除与某些文件扩展名不匹配的目录中的文件
- 18. 基于模式匹配从S3中删除文件?
- 19. 删除文件中的文本匹配
- 20. 如何从一组文件中删除所有匹配模式的行?
- 21. 猛砸如何删除与源达匹配的17管目标文件记录
- 22. 如何在Perl中删除与特定模式匹配的行?
- 23. Mono如何删除匹配正则表达式的文件
- 24. 删除文件中的完全匹配
- 25. 如何删除mongodb中条件不匹配的记录
- 26. 从阵列中删除项目匹配模式
- 27. Bash脚本迭代目录中的文件和模式匹配文件名
- 28. 使用模式匹配删除Windows文件夹
- 29. 如果另一个文件中的同一行匹配模式,则删除行
- 30. 正则表达式htaccess匹配模式,除非目录存在
你可以使用正则表达式。做一些Google模式匹配,RegEx不是我的专长,但他们是强大的地狱。 – 2009-06-12 20:05:24
(文件API通常不支持正则表达式,只是普通的通配符。完整的regex是外壳和脚本语言更多的东西) – 2009-06-12 20:42:57