带过滤器的FileSystemWatcher不会监视已删除的地图

时间:2015-01-14 14:08:36

标签: c# events filesystemwatcher

我创建了一个filesystemwatcher来观看某个目录并观察带有Tests扩展名的文件。

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = somepath;
watcher.Filter = "*.Tests";
// Hooked changed, deleted and created events
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;

在监视目录或其子目录中创建,删除或更改带有测试扩展名的文件时,事件会正确触发。

问题是,例如我是否在监视目录中删除了包含Tests扩展名的文件的地图。然后,不会触发任何事件,尽管许多具有测试扩展名的文件都会被删除。

有没有办法可以实现这一目标?

1 个答案:

答案 0 :(得分:2)

嗯,问题是文件夹实际上没有删除文件 - 所以FileSystemWatcher无法过滤这些文件。您只能获得一次删除 - 用于目录。如果您确实需要在实践中处理此问题,则必须使用单独的FileSystemWatcher来监视删除整个目录。

当然,这也取决于删除的完成方式 - 很多应用程序仍然执行"删除所有文件,然后删除目录"。您通常可以非常轻松地区分出来 - 如果删除包含大量文件的目录需要时间,则首先要删除文件。这些将适用于您的情况 - 但其他人将失败。

如果您只是需要解决方法,大多数应用程序将切换到每个文件删除,因为单个删除无法删除目录 - 例如,当有锁定文件时目录。