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() 方法。
为什么 Directory.Exists
returns 对于 FileSystemWatcher
观察到的目录为真,即使它已被删除。
我必须在检查 Directory.Exists
之前调用 EnableRaisingEvents = false
,因为它总是 returns true。
编辑:
我正在尝试使用错误事件检查文件夹是否被删除或连接丢失。
为了添加延迟,我在检查目录之前使用 Tread.Sleep()
命令对其进行了测试,但它仍然认为它存在。
FileSystemWatcher 以在事件开始时而不是在事件完成时引发事件而闻名。这里有很多关于等待复制完成的问题。
这同样适用于删除文件夹。删除文件夹需要时间
大实话,目录并没有真正被删除。当进程在其上打开句柄时,操作系统会主动防止目录消失。就像你开始观看时 FSW 所做的那样。或者当目录是进程的 Environment.CurrentDirectory 时。
这不会阻止您删除该目录。与 .NET 中用于文件的 FileShare.Delete 选项非常相似。它现在将处于不确定状态,等待最后一个句柄关闭,然后才能真正从文件系统中删除。任何试图在处于这种边缘状态时使用目录的程序都将被打耳光,以确保最终会发生这种情况。
您必须调用 FileSystemWatcher.Dispose() 方法。