【问题标题】:FileSystemWatcher Raising Multiple EventsFileSystemWatcher 引发多个事件
【发布时间】:2012-10-05 01:02:56
【问题描述】:

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

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

例如,如果我在 Root 中创建一个名为 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的代码

 _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);
 }

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

  protected static void OnChanged(object sender, FileSystemEventArgs e)
    {
        //compile message to insert into log file.
        string message = "File: " + e.FullPath + " " + e.ChangeType;
        UpdateLogFile(message);
    }

【问题讨论】:

  • 获得所有三个建议我创建它们的代码正在重命名。重命名会给你一个删除,然后是创建,然后是写入。

标签: c# logging filesystemwatcher


【解决方案1】:

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

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

【讨论】:

  • 实际上,我只是尝试过这个,只有.Changed 事件我没有引发任何事件。甚至没有“文件更改”事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多