使用 Delphi 删除没有弹出窗口的文件

Mar*_*cel 1 delphi

我正在使用以下代码删除文件夹的内容,我现在唯一的问题是,如果其中一个文件正在使用中,它会弹出一个确认对话框,然后开始向软件用户显示进度。

由于这些是临时文件,用户完全被弹出窗口弄糊涂了,并不断询问它。

有什么方法可以调整它,以便如果文件正在使用或无法删除,则代码将移至下一个文件并忽略此文件,直到下一次尝试。

代码

procedure DelFilesFromDir(Directory, FileMask: string; DelSubDirs: Boolean);
var
  SourceLst: string;
  FOS: TSHFileOpStruct;
begin
  FillChar(FOS, SizeOf(FOS), 0);
  FOS.Wnd := Application.MainForm.Handle;
  FOS.wFunc := FO_DELETE;
  SourceLst := Directory + '\' + FileMask + #0;
  FOS.pFrom := PChar(SourceLst);
  if not DelSubDirs then
    FOS.fFlags := FOS.fFlags OR FOF_FILESONLY;
  FOS.fFlags := FOS.fFlags OR FOF_NOCONFIRMATION;
  SHFileOperation(FOS);
end;
Run Code Online (Sandbox Code Playgroud)

Sil*_*ior 5

为了避免在遇到错误时显示任何对话框,您应该添加FOF_NOERRORUI一个额外的标志。

此外,如果您想完全隐藏有关文件操作进度的信息,您可以添加该FOF_NO_UI标志。

您可以在官方SHFileOperation()文档中阅读有关可能的标志的更多信息。