我正在使用FileSystemWatcher
s来处理我正在开发的一些代码。我确实有一个问题,当FSW正在观看的文件夹被删除时会发生什么?
我的用例是:
用户创建目录Foo
我的代码然后使用和FSW
用户删除Foo
稍后,用户重新创建Foo目录。
在这种情况下,原FSW会发生什么?它还会看新目录,还是我必须创建一个新目录?
非常感谢任何帮助。
答案 0 :(得分:3)
TL; DR:不,FSW不会自动观看" Foo"重新创建后。
最简单的方法是验证是否要测试它,所以我做到了。
如果您使用FileSystemWatcher
的实例来观看目录" Foo",然后删除正在观看的目录,则FileSystemWatcher
将停止观看该目录。
即使在重新创建具有相同名称" Foo"的目录后,FileSystemWatcher
也不会再为该目录中的任何更改引发事件。
" Foo"被删除并重新创建,试图"重置"将FileSystemWatcher
属性设置为" Foo" Path
并且EnableRaisingEvents
属性为true并不一致 - 它第一次正常工作,但如果" Foo"被删除并第二次重新创建。 (这是在Visual Studio 2017社区版中测试的)。
可悲的是,似乎在这种情况下,使FileSystemWatcher
按预期工作的唯一一致方法是创建FileSystemWatcher
的新实例。
答案 1 :(得分:0)
某些常见事件(例如复制或移动文件或目录)与事件不直接对应,但这些事件确实会引发事件。复制文件或目录时,如果正在监视该目录,则系统会在复制文件的目录中引发Created事件。如果另一个FileSystemWatcher实例正在监视您复制的目录,则不会引发任何事件。例如,您创建两个FileSystemWatcher实例。 FileSystemWatcher1设置为观看“C:\ My Documents”,FileSystemWatcher2设置为观看“C:\ Your Documents”。如果将文件从“我的文档”复制到“您的文档”中,FileSystemWatcher2将引发Created事件,但不会为FileSystemWatcher1引发任何事件。与复制不同,移动文件或目录会引发两个事件。在上一个示例中,如果您将文件从“我的文档”移动到“您的文档”,FileSystemWatcher2将引发Created事件,FileSystemWatcher1将引发Deleted事件。