События FileSystemWatcher, вызываемые несколько раз - PullRequest
0 голосов
/ 06 февраля 2020

Я создал консольное приложение для просмотра указанной папки c с помощью 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 Ответ

1 голос
/ 06 февраля 2020

Это поведение задокументировано . Также задокументировано, что вам не гарантируется, что все события будут доставлены. Приложение должно защищать себя от любого случая.

Обычные операции файловой системы могут вызывать более одного события. Например, когда файл перемещается из одного каталога в другой, могут возникнуть несколько событий OnChanged и некоторые события OnCreated и OnDeleted. Перемещение файла - это сложная операция, которая состоит из нескольких простых операций, поэтому вызывает несколько событий. Аналогичным образом, некоторые приложения (например, антивирусное программное обеспечение) могут вызывать дополнительные события файловой системы, которые обнаруживаются FileSystemWatcher.

Также обратите внимание, что приведенное выше поведение Win32, FSW просто включает в себя функцию операционной системы. в более приятный интерфейс.

...