C#FileWatcher - 如何仅包含一个子文件夹?

时间:2018-03-23 12:26:47

标签: c# subdirectory file-watcher

我告诉我的FileWatcher,它应该包含子目录

_watcher.IncludeSubdirectories = true;

我遇到的问题是,有多个文件具有相同的文件结尾。 所以我的观察者多次被触发。

我有类似的东西

(子文件夹[x]是被观看者)

mainFolder / subfolder [x] / - >在这个example.mkv和另外两个文件类型 mainFolder / subfolder [x] / subfolder2 / - >在这一个只是一个sample.mkv

FileWatcher配置为:

_watcher.Filter = "*.mkv";

目前"已创建"事件被触发两次(" example.mkv"" sample.mkv") 我希望它只是为" example.mkv"触发了一次。而不是" sample.mkv"。 我怎么能只是观看"第一个子文件夹并排除第二个子文件夹?

1 个答案:

答案 0 :(得分:-1)

您只想查看目标树的目标和第一顺序子目录/前两个级别。接近于0的代码能够在Windows上具有这样的能力,并且能够包含子目录。它是"包括所有子目录"或"不包含子目录"。

只有像Robocopy那样现代的代码才能定义"深度"。 FileWatcher并不是那么现代。它像办公室COM Interop一样生锈。它仍然遵循旧的"所有子目录或无"图案。所以你仍然需要使用旧的解决方法 - 手动递归:

  1. 请勿使用IncludeSubdirectories = true;
  2. 在根目录
  3. 上启动正常的非递归文件监视程序
  4. 手动迭代所有子目录。 Directory类应该包含你
  5. 为每个子目录启动一个单独的非递归观察器
  6. 不幸的是,FileWatcher不是最先进的类。例如,弄清楚发生了哪种变化几乎是不可能的。这就是为什么有人带着9个带过滤器的手表并将它们放在一个类中,以便从这个类中获得一些不错的信息:https://www.codeproject.com/Articles/58740/FileSystemWatcher-Pure-Chaos-Part-of