如果受监控的目录被删除(/重命名/移动),我希望得到通知。
以下伪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实现似乎在行为上有所不同。
答案 0 :(得分:1)
您可以创建第二个FileSystemWatcher,一个级别,并设置Filter和NotifyFilter以仅监视您感兴趣的目录和事件。
答案 1 :(得分:0)
正如您所注意到的,没有完美的内置方法可以做到这一点。就像菲利普所说,你可以使用多层次的方法。但FileSystemWatcher缺乏一定的稳定性,可能会导致快速运行的网络环境出现问题。
因此,如果您需要一个高性能的解决方案 - 特别是在网络上 - 我强烈建议使用符合您需求的时序的轮询策略,或者在此之前和之前协助FileSystemWatcher进行可用性调查。