我创建了一个控制台应用程序,以使用 filesystemwatcher 来监视特定的文件夹。 当我在任何文件中进行任何更改或创建,重命名或删除时,它将触发事件。 但是当我更改文件时,将触发2个事件。对于该相应操作,我只需要触发一个事件....
下面是我的代码,当我更改文件时会触发2个事件
public static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
FileSystemWatcher watcher = new FileSystemWatcher();
string time = DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss");
string myFilePath = e.FullPath;
string ext = Path.GetExtension(myFilePath);
if (ext == ".tmp" || ext == ".TMP" || ext == "")
{
}
else
{
string date = DateTime.Now.ToString("dd-MM-yyyy hh:mm:ss");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("A new file has been changed - " + e.Name + " " + "on" + " " + date + " File Changed", Console.ForegroundColor);
// SendAttachmentMail("A File Has Been Changed - " + e.Name + "", date, "File Changed");
//File_Date = date;
//watcher.Dispose();
}
}
答案 0 :(得分:1)
此行为是documented。还记录了您不能保证将交付所有事件。应用程序必须保护自己免受任何情况的侵害。
常见文件系统操作可能引发多个事件。对于 例如,当文件从一个目录移动到另一个目录时, 可能会引发OnChanged以及一些OnCreated和OnDeleted事件。 移动文件是一个复杂的操作,包括多个简单的操作 操作,因此引发多个事件。同样,一些 应用程序(例如,防病毒软件)可能会导致其他 FileSystemWatcher检测到的文件系统事件。
还要注意,以上是Win32的行为,FSW只是将操作系统功能包装到一个更好的界面中。