TDirectory.Delete 似乎是异步的

WeG*_*ars 3 delphi delphi-xe7

我观察到在调用 TDirectory.Delete(x) 后立即调用 DirectoryExists(x) 返回 true,如果要删除的文件夹中的文件很少并且文件夹处于打开状态(在 Total Commander 中)。

换句话说:

begin 
  TDirectory.Delete('x', true);  <-- 'Delete' exited but the folder is still not fully deleted
  if SysUtils.DirectoryExists('x')...  <-- This returns true
end;
Run Code Online (Sandbox Code Playgroud)

这是正常行为吗?

“解决方案”是这样的:

begin 
  TDirectory.Delete('x', true); 
  Sleep(1000);          //wait for Delete to finish
  if SysUtils.DirectoryExists('x')...
end;
Run Code Online (Sandbox Code Playgroud)

问题:我如何知道 Delete 何时准备就绪(如何消除睡眠)?

注意:Total Commander 不会阻止文件夹的删除(我猜),因为文件夹无论如何都会被删除(一段时间后)。

R. *_*oer 5

看看关于 RemoveDirectory 的 msdn 页面:https ://msdn.microsoft.com/en-us/library/windows/desktop/aa365488( v= vs.85).aspx

备注部分说:

RemoveDirectory 函数标记一个目录以在关闭时删除。因此,在关闭目录的最后一个句柄之前,不会删除该目录。

所以可能另一个进程也有目录的句柄(病毒扫描程序?)。

如果您需要清空目录,请清空它而不是删除它然后再重新创建它。最后,您总是为肮脏的黑客行为付出代价;)