FileSystemWatcher事件被多次调用

时间:2020-02-06 05:59:34

标签: c# windows triggers console-application filesystemwatcher

我创建了一个控制台应用程序,以使用 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();



            }
        } 

1 个答案:

答案 0 :(得分:1)

此行为是documented。还记录了您不能保证将交付所有事件。应用程序必须保护自己免受任何情况的侵害。

常见文件系统操作可能引发多个事件。对于 例如,当文件从一个目录移动到另一个目录时, 可能会引发OnChanged以及一些OnCreated和OnDeleted事件。 移动文件是一个复杂的操作,包括多个简单的操作 操作,因此引发多个事件。同样,一些 应用程序(例如,防病毒软件)可能会导致其他 FileSystemWatcher检测到的文件系统事件。

还要注意,以上是Win32的行为,FSW只是将操作系统功能包装到一个更好的界面中。