【发布时间】:2014-05-12 13:36:04
【问题描述】:
我正在使用 Windows API 递归删除许多文件和文件夹。我在没有 UI 的情况下使用它并抑制错误。问题是,如果其中一个文件正在使用中,它会完全失败。我期待这种可能性,并希望这种情况继续下去,跳过任何此类情况。失败的文件实际上是调用此删除命令的同一个 EXE(无论如何都会在全部完成后删除。
这是我现在正在做的事情:
procedure DeleteDirectory(const DirName: string);
var
FileOp: TSHFileOpStruct;
begin
FillChar(FileOp, SizeOf(FileOp), 0);
FileOp.wFunc := FO_DELETE;
FileOp.pFrom := PChar(DirName+#0);//double zero-terminated
FileOp.fFlags := FOF_SILENT or FOF_NOERRORUI or FOF_NOCONFIRMATION;
SHFileOperation(FileOp);
end;
我怎样才能让它跳过正在使用的文件的任何事件?我查看了the documentation,但找不到任何可以做到这一点的东西。
【问题讨论】:
-
IFileOperation可以处理这个问题。您可能需要使用它,或者使用递归 FindFirst、FindNext 方法自行遍历目录。 -
您应该发布显示问题的代码......而不是有效的代码!
-
@JochenKalmbach 你看我的问题了吗?
-
@Jerry 我的答案中的第二个代码示例将满足您的需求:stackoverflow.com/questions/11798783/…
-
我认为是 IFileOperation 或手动树行走
标签: delphi winapi shfileoperation