【问题标题】:Cannot Watch Folder using FileSystemWatcher in C#无法在 C# 中使用 FileSystemWatcher 监视文件夹
【发布时间】:2011-05-20 19:06:05
【问题描述】:

我正在尝试监视文件夹(及其子文件夹)的更改。但是,我的处理程序事件永远不会执行。我正在使用以下代码:

FileSystemWatcher m_Watcher = new FileSystemWatcher();
m_Watcher.Path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Portal 2 Map Installer/"; 
m_Watcher.Filter = "";
m_Watcher.NotifyFilter = NotifyFilters.LastAccess |
             NotifyFilters.LastWrite |
             NotifyFilters.FileName |
             NotifyFilters.DirectoryName;
m_Watcher.IncludeSubdirectories = true;
m_Watcher.Changed += new FileSystemEventHandler(OnFolderChange);
m_Watcher.EnableRaisingEvents = true;

请帮忙!

【问题讨论】:

  • 该代码在我看来是正确的。问题一定出在其他地方。您要查看哪种类型的文件系统?例如,这不适用于 FAT32 分区。
  • 我想我已经明白了!由于某种原因,我的 Form1_Load 事件没有触发,这是我进行所有初始化的地方。现在找出原因。
  • 好的,成功了!现在有谁知道如何阻止事件被触发三次?我触发了创建的事件,然后触发了两个更改的事件。
  • @Yoshie:你应该在构造函数中设置这样的属性:public Form1(),而不是在Load事件处理方法中。
  • 你无法阻止事件被多次触发,所以你必须解决这个问题。请参阅stackoverflow.com/questions/449993/… 获取一些建议。

标签: c# filesystemwatcher .net


【解决方案1】:

为 on error 事件创建一个处理程序并查看它的含义:

  m_Watcher.Error += new ErrorEventHandler(OnError);

【讨论】:

  • 错误 3 属性或索引器 'Portal_2_Level_Installer.Form1.OnError' 无法在此上下文中使用,因为它缺少 get 访问器
  • 错误 4 'Portal_2_Level_Installer.Form1.OnError' 是一个“属性”,但用作“方法”
  • @YoshieMaster:你需要先定义你的 OnError 处理程序。
【解决方案2】:

Changed 事件处理程序有一些注意事项:

重命名文件时会意外引发 Changed 事件,但重命名目录时不会引发 Changed 事件。要监视重命名,请使用 Renamed 事件。

因此,处理Renamed 事件也是谨慎的做法(至少)。

【讨论】:

  • 文件夹或其内容永远不会被删除。文件被放入文件夹,执行操作,然后删除。
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多