我觀察到在調用TDirectory.Delete(x)後立即調用DirectoryExists(x)返回true如果要刪除的文件夾中包含少量文件並且該文件夾已打開(在Total Commander中)。TDirectory.Delete似乎是異步的
換句話說:
begin
TDirectory.Delete('x', true); <-- 'Delete' exited but the folder is still not fully deleted
if SysUtils.DirectoryExists('x')... <-- This returns true
end;
這是一種正常的行爲?
的「解決方案」是這樣的:
begin
TDirectory.Delete('x', true);
Sleep(1000); //wait for Delete to finish
if SysUtils.DirectoryExists('x')...
end;
問:我如何知道什麼時候刪除已準備好(我怎麼消除睡眠)?
注意:Total Commander不會阻止文件夾的刪除(我猜),因爲無論如何文件夾被刪除(一段時間後)。
爲什麼你會在'TDirectory.Delete'之後立即調用'DirectoryExists'? –
@ R.Beiboer可能檢查目錄是否已被刪除,因爲TDirectory.Delete缺少結果值。 –
@ R.Beiboer:防禦性編碼,除了其他原因之外,嘗試檢查目錄是否在與其存在不一致之前檢查過。 – MartynA