Directory.Exists和FileSystemWatcher

时间:2015-06-17 12:42:07

标签: c# .net filesystemwatcher

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

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

编辑:

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

2 个答案:

答案 0 :(得分:4)

您只是看到了Honest Truth,该目录实际上并未删除。当进程在其上打开句柄时,操作系统会主动阻止目录消失。就像你开始观看FSW一样。或者当目录是进程的Environment.CurrentDirectory时。

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

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

答案 1 :(得分:1)

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

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