我正在为正在开发的一些代码使用FileSystemWatcher
s。我确实有一个问题,当它正在观看的文件夹被删除时,FSW会发生什么情况?
我的用法是:
在这种情况下,最初的FSW会发生什么?它是否还在观察新目录,还是必须创建一个新目录?
任何帮助都是非常感谢的。
发布于 2017-03-19 05:10:10
TL;DR:不,FSW在被重新创建后不会自动手表"Foo“。
最简单的方法是验证它是测试出来的,所以我做了。
如果使用FileSystemWatcher
实例查看目录"Foo",然后删除正在监视的目录,则FileSystemWatcher
将停止监视该目录。
即使在重新创建了同名为"Foo“的目录之后,FileSystemWatcher
也不会为该目录中的任何更改引发事件。
在删除和重新创建"Foo“之后,尝试通过将"Foo”属性设置为"Foo“来”重置“FileSystemWatcher
,而将EnableRaisingEvents
属性设置为”true“则不能一致地工作--它第一次正确工作,但如果删除”Foo“并再次重新创建,则无法做到这一点。(在VisualStudio2017社区版中进行了测试)。
可悲的是,在这种情况下,使FileSystemWatcher
按预期工作的唯一一致方法是创建FileSystemWatcher
的一个新实例。
发布于 2017-03-19 04:16:21
MSDN说:
一些常见的事件,如复制或移动文件或目录,并不直接对应于事件,但这些事件确实会引发事件。复制文件或目录时,如果正在监视文件或目录,系统将在复制该文件的目录中引发创建的事件。如果FileSystemWatcher的另一个实例正在监视您复制的目录,则不会引发任何事件。例如,创建两个FileSystemWatcher实例。FileSystemWatcher1被设置为查看"C:\My Documents",而FileSystemWatcher2则设置为监视"C:\Your Documents“。如果您将文件从“我的文档”复制到“您的文档”,则FileSystemWatcher2将引发创建的事件,但FileSystemWatcher1不会引发任何事件。与复制不同,移动文件或目录会引发两个事件。从前面的示例中,如果您将文件从“我的文档”移动到“您的文档”,则FileSystemWatcher2将引发创建的事件,而FileSystemWatcher1将引发已删除的事件。
https://stackoverflow.com/questions/42882838
复制相似问题