gpt4 book ai didi

c# - 如何使用 C# 同步一致地删除 NTFS 上的文件夹

转载 作者:太空狗 更新时间:2023-10-29 23:21:12 25 4
gpt4 key购买 nike

这个:

Directory.Delete(dir, true);

不是同步的。

在紧接着的行中,您仍然可以操作/读取目录。

例如,这个:

Directory.Delete(destinationDir, true);
Directory.CreateDirectory(destinationDir);
Thread.Sleep(1000);

导致文件夹不存在。删除运行异步,CreateDirectory 不会创建,因为它已经存在,然后 delete 实际上会触发并删除目录。

是否有可以提供一致性的 IO API?

涉及 Thread.Sleep 的答案将调用 Zalgo。我想要一个真正的解决方案。

最佳答案

正如其他人所提到的,.net Framework 似乎并未同步运行。在 PowerShell 中对其进行测试表明 .Net 调用不会等待,因此类似这样的操作会产生类似的结果:

Remove-Item -Recurse -Force "C:\tempfolder"
New-Item -ItemType Directory "C:\tempfolder"

使用文件观察器(前面也提到过)将确保在创建完成之前完成目录删除:

var path = @"C:\tempfolder";
var watcher = new FileSystemWatcher(path);
watcher.Deleted += (sender, args) => Directory.CreateDirectory(args.FullPath);
Directory.Delete(path, true);

没有真正的惊喜,但至少它是一个不涉及从托管代码调用 C++ API 的可行解决方案。

关于c# - 如何使用 C# 同步一致地删除 NTFS 上的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36384368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com