FileSystemWatcher引发多个事件

时间:2012-10-04 16:48:38

标签: c# logging filesystemwatcher

如果这是一个重复的问题,我将开始道歉。有大量的FileSystemWatcher问题,但我没有看到任何解决我的问题。

好的,所以我在C#中有一个监控目录的控制台应用程序,我们称之为RootRoot有很多子文件夹。此应用程序的目的是在Root或其任何子文件夹中创建,修改或删除任何.csv文件时写入日志文件。我目前有这个工作正常,有点。唯一的问题是,当创建,修改或删除.csv文件时,它实际上会为所有3提升事件。

例如,如果我在名为Root的{​​{1}}中创建文件,则日志文件将如下所示:

test.csv

我不知道最近会发生什么,所以这里是设置 10/04/2012: File F:/Root/test.csv Created 10/04/2012: File F:/Root/test.csv Changed 10/04/2012: File F:/Root/test.csv Created 10/04/2012: File F:/Root/test.csv Deleted

的代码
FileSystemWatcher

这是我的OnChanged事件(重命名是相同但有不同的参数)

 _watchFolder.Path = ConfigurationManager.AppSettings["RootToWatch"];
 _watchFolder.Filter = ConfigurationManager.AppSettings["FileNameToWatch"];
 _watchFolder.NotifyFilter = NotifyFilters.FileName 
                             | NotifyFilters.LastWrite;
 _watchFolder.IncludeSubdirectories = true;
 _watchFolder.Changed += new FileSystemEventHandler(OnChanged);
 _watchFolder.Created += new FileSystemEventHandler(OnChanged);
 _watchFolder.Deleted += new FileSystemEventHandler(OnChanged);
 _watchFolder.Renamed += new RenamedEventHandler(OnRenamed);

 try
 {
     _watchFolder.EnableRaisingEvents = true; 
 }
 catch (ArgumentException ex)
 {
     AbortMonitoring(ex.Message);
 }

1 个答案:

答案 0 :(得分:0)

只为changed事件添加处理程序。它应该收集所有更改类型。如果您希望仅在特定更改类型上引发事件,则会出现其他类型的事件,例如created

watchFolder.IncludeSubdirectories = true;
_watchFolder.Changed += new FileSystemEventHandler(OnChanged);