我使用以下代码删除大量文件
function FastDelete(const fromDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_DELETE;
fFlags := FOF_FILESONLY or
FOF_NOCONFIRMATION or
FOF_NO_CONNECTED_ELEMENTS or
FOF_NOERRORUI or
FOF_NO_UI;
pFrom := PChar(fromDir+'\*.*' + #0);
end;
Result := (0 = ShFileOperation(fos));
end;
如何让它以递归方式删除路径中的所有文件?
编辑
问题是 FOF_FILESONLY 标志 删除后,文件将被递归删除
答案 0 :(得分:4)
<强> FOF_NORECURSION 强>
仅在本地目录中执行操作。不要以递归方式操作子目录,这是默认行为。
看起来那是你的答案。它应该自动递归,除非你不要求它。
编辑:看起来你的旗子有问题。您需要将 OR 组合在一起,而不是将它们添加到一起。由于FOF_NO_UI
已包含FOF_NOERRORUI
,因此再次添加可能会更改该值,您可能会意外添加一些加起来FOF_NORECURSION
的内容。它应该是这样的:
fFlags := FOF_FILESONLY or
FOF_NOCONFIRMATION or
FOF_NO_CONNECTED_ELEMENTS or
FOF_NOERRORUI or
FOF_NO_UI;
答案 1 :(得分:1)
你还要保留目录吗?如果没有,你可以通过
pFrom := PChar(fromDir+#0);
另一种选择是构建一个#0分隔文件路径列表,并从msdn传递额外的#0:
虽然此成员被声明为以null结尾的字符串,但它被用作保存多个文件名的缓冲区。每个文件名必须以单个NULL字符终止。必须在最终名称的末尾附加一个额外的NULL字符,以表示pFrom的结束。