Directory.Exists 和 FileSystemWatcher

Directory.Exists and FileSystemWatcher

为什么 Directory.Exists returns 对于 FileSystemWatcher 观察到的目录为真,即使它已被删除。

我必须在检查 Directory.Exists 之前调用 EnableRaisingEvents = false,因为它总是 returns true。

编辑:

我正在尝试使用错误事件检查文件夹是否被删除或连接丢失。 为了添加延迟,我在检查目录之前使用 Tread.Sleep() 命令对其进行了测试,但它仍然认为它存在。

FileSystemWatcher 以在事件开始时而不是在事件完成时引发事件而闻名。这里有很多关于等待复制完成的问题。

这同样适用于删除文件夹。删除文件夹需要时间

大实话,目录并没有真正被删除。当进程在其上打开句柄时,操作系统会主动防止目录消失。就像你开始观看时 FSW 所做的那样。或者当目录是进程的 Environment.CurrentDirectory 时。

这不会阻止您删除该目录。与 .NET 中用于文件的 FileShare.Delete 选项非常相似。它现在将处于不确定状态,等待最后一个句柄关闭,然后才能真正从文件系统中删除。任何试图在处于这种边缘状态时使用目录的程序都将被打耳光,以确保最终会发生这种情况。

您必须调用 FileSystemWatcher.Dispose() 方法。