【问题标题】:Windows Form System FileWatcher C#Windows 窗体系统 FileWatcher C#
【发布时间】:2020-05-27 12:53:04
【问题描述】:

我在 Windows 窗体应用程序上使用系统文件监视程序,它应该检测文件夹和子目录中的 *.mp4 文件并将名称添加到网格中。我还包括另一个文件系统观察程序来监视另一个文件夹中的 *.txt 文件。

它适用于几个文件,但不再适用。

我已将缓冲区增加到最大值,更改了通知过滤器,但仍然在 3 或 4 次捕获后停止。 我的目标是整天运行应用程序,有没有办法以编程方式释放缓冲区?或者是否有其他属性可以提供帮助?

obs:我使用 try 所以它不会执行两次,正如 David 在 https://stackoverflow.com/a/2780832/8684048

建议的那样
   try
      {
        fSW_Finalizados.EnableRaisingEvents = false;
        FoundFile(e.FullPath);
      }
      finally
      {
        fSW_Finalizados.EnableRaisingEvents = true;
      }

谢谢。

【问题讨论】:

  • 你能显示不工作的代码吗?
  • @Steve 添加到说明中。
  • 但是您希望处理多少个文件?从我可以从文档中推断出,每个事件都需要 16 个字节加上文件名大小,所以如果我们假设文件名很长,我们平均需要 255 个字节。这意味着标准 8KB 缓冲区中有 32 个事件的空间。如果我们扩展到 64KB,那么在开始松散跟踪新事件之前,空间足以容纳 257 个事件。
  • 您的文件是否存储在网络驱动器上?我遇到了我在emoreau.com/Entries/Articles/2005/04/… 中解释过的问题
  • @Steve 一次最多 4 个文件,真的不多。

标签: c# windows-forms-designer filesystemwatcher


【解决方案1】:

不要使用 FILESYSTEMWATCHER。

我经历了很多,我建议您改用计时器(我就是这样做的),它每秒或每 100 毫秒运行一次,并观察您的目录中是否有任何新文件。一旦您在同一时间(数百个)删除了太多文件,FileSystemWatcher 就会停止工作,并且只有在您删除新文件后才会恢复。

使用计时器和字符串列表来检查文件何时添加到您的目录。

【讨论】:

  • 作为我第一次使用 fswatcher,我也认为它不可靠,如果在接下来的测试中仍然失败,我将遵循您的 Timer 解决方案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多