【问题标题】:FileSystemWatcher with filter doesn't watch deleted maps带过滤器的 FileSystemWatcher 不监视已删除的地图
【发布时间】:2015-01-14 14:08:35
【问题描述】:

我创建了一个文件系统监视程序来监视某个目录并监视具有测试扩展名的文件。

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

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

问题是,例如,如果我在监视目录中删除了一个地图,其中包含带有 Tests 扩展名的文件。尽管删除了许多带有 Tests 扩展名的文件,但不会触发任何事件。

有什么办法可以实现吗?

【问题讨论】:

    标签: c# events filesystemwatcher


    【解决方案1】:

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

    当然,这也取决于删除是如何完成的——很多应用程序仍然会“删除所有文件,然后是目录”。您通常可以很容易地分辨出差异 - 如果删除包含大量文件的目录需要时间,则首先删除文件。这些将适用于您的情况 - 但其他人将失败。

    如果您只是需要解决方法,大多数应用程序将在无法通过一次删除删除目录时切换到按文件删除 - 例如,当目录中有锁定的文件时。

    【讨论】:

    • 感谢您的信息,现在我知道这里发生了什么。我想我将摆脱过滤器并检查事件处理程序中的扩展。
    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多