如何获得有关删除FileSystemWatcher监视的目录的通知?

时间:2015-03-20 20:22:05

标签: c# .net windows ioexception filesystemwatcher

如果受监控的目录被删除(/重命名/移动),我希望得到通知。

以下伪C#代码可能有助于理解我的问题:

bool called = false;
var fsw = new FileSystemWatcher(path);
fsw.Error += delegate(object s, ErrorEventArgs args) {
    Assert.That(args.GetException() is IOException);
    called = true;
};
fsw.Deleted += delegate(object source, FileSystemEventArgs e) {
    Assert.That(e.ChangeType, Is.EqualTo(WatcherChangeTypes.Deleted));
    called = true;
};
Directory.Delete(path);
Thread.Sleep(1000);
Assert.That(called, Is.True);

如果我调用WaitForChanged方法,则会返回IOException,但我还有其他方法可以获得有关此问题的通知吗?

Linux上的单声道实现工作正常,只返回Deleted事件。但Windows上的.Net实现似乎在行为上有所不同。

2 个答案:

答案 0 :(得分:1)

您可以创建第二个FileSystemWatcher,一个级别,并设置Filter和NotifyFilter以仅监视您感兴趣的目录和事件。

答案 1 :(得分:0)

正如您所注意到的,没有完美的内置方法可以做到这一点。就像菲利普所说,你可以使用多层次的方法。但FileSystemWatcher缺乏一定的稳定性,可能会导致快速运行的网络环境出现问题。

因此,如果您需要一个高性能的解决方案 - 特别是在网络上 - 我强烈建议使用符合您需求的时序的轮询策略,或者在此之前和之前协助FileSystemWatcher进行可用性调查。