C#:删除监视文件夹后,FileSystemWatcher会发生什么

时间:2017-03-19 04:10:37

标签: c# filesystemwatcher

我正在使用FileSystemWatcher s来处理我正在开发的一些代码。我确实有一个问题,当FSW正在观看的文件夹被删除时会发生什么?

我的用例是:

  1. 用户创建目录Foo

  2. 我的代码然后使用和FSW

  3. 观看Foo
  4. 用户删除Foo

  5. 稍后,用户重新创建Foo目录。

  6. 在这种情况下,原FSW会发生什么?它还会看新目录,还是我必须创建一个新目录?

    非常感谢任何帮助。

2 个答案:

答案 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)

MSDN说:

  

某些常见事件(例如复制或移动文件或目录)与事件不直接对应,但这些事件确实会引发事件。复制文件或目录时,如果正在监视该目录,则系统会在复制文件的目录中引发Created事件。如果另一个FileSystemWatcher实例正在监视您复制的目录,则不会引发任何事件。例如,您创建两个FileSystemWatcher实例。 FileSystemWatcher1设置为观看“C:\ My Documents”,FileSystemWatcher2设置为观看“C:\ Your Documents”。如果将文件从“我的文档”复制到“您的文档”中,FileSystemWatcher2将引发Created事件,但不会为FileSystemWatcher1引发任何事件。与复制不同,移动文件或目录会引发两个事件。在上一个示例中,如果您将文件从“我的文档”移动到“您的文档”,FileSystemWatcher2将引发Created事件,FileSystemWatcher1将引发Deleted事件。