gpt4 book ai didi

c# - FileSystemWatcher 引发多个事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:24 25 4
gpt4 key购买 nike

如果这是一个重复的问题,我首先要道歉。有大量的 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);
}

最佳答案

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

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

关于c# - FileSystemWatcher 引发多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com