Прочитать на английском

Поделиться через


FileSystemWatcher.Changed Событие

Определение

Происходит при изменении файла или каталога по заданному пути Path.

public event System.IO.FileSystemEventHandler? Changed;
public event System.IO.FileSystemEventHandler Changed;
[System.IO.IODescription("FSW_Changed")]
public event System.IO.FileSystemEventHandler Changed;

Тип события

Атрибуты

Примеры

В следующем примере событие используется Changed для отображения пути к файлу к консоли при каждом изменении отслеживаемого файла.

using System;
using System.IO;

namespace MyNamespace
{
    class MyClassCS
    {
        static void Main()
        {
            using var watcher = new FileSystemWatcher(@"C:\path\to\folder");

            watcher.NotifyFilter = NotifyFilters.Attributes
                                 | NotifyFilters.CreationTime
                                 | NotifyFilters.DirectoryName
                                 | NotifyFilters.FileName
                                 | NotifyFilters.LastAccess
                                 | NotifyFilters.LastWrite
                                 | NotifyFilters.Security
                                 | NotifyFilters.Size;

            watcher.Changed += OnChanged;
            watcher.Created += OnCreated;
            watcher.Deleted += OnDeleted;
            watcher.Renamed += OnRenamed;
            watcher.Error += OnError;

            watcher.Filter = "*.txt";
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;

            Console.WriteLine("Press enter to exit.");
            Console.ReadLine();
        }

        private static void OnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType != WatcherChangeTypes.Changed)
            {
                return;
            }
            Console.WriteLine($"Changed: {e.FullPath}");
        }

        private static void OnCreated(object sender, FileSystemEventArgs e)
        {
            string value = $"Created: {e.FullPath}";
            Console.WriteLine(value);
        }

        private static void OnDeleted(object sender, FileSystemEventArgs e) =>
            Console.WriteLine($"Deleted: {e.FullPath}");

        private static void OnRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"Renamed:");
            Console.WriteLine($"    Old: {e.OldFullPath}");
            Console.WriteLine($"    New: {e.FullPath}");
        }

        private static void OnError(object sender, ErrorEventArgs e) =>
            PrintException(e.GetException());

        private static void PrintException(Exception? ex)
        {
            if (ex != null)
            {
                Console.WriteLine($"Message: {ex.Message}");
                Console.WriteLine("Stacktrace:");
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine();
                PrintException(ex.InnerException);
            }
        }
    }
}

Комментарии

Событие Changed возникает при внесении изменений в размер, системные атрибуты, время последней записи, время последнего доступа или разрешения безопасности файла или каталога в отслеживаемом каталоге.

Примечание

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

Используйте для NotifyFilter ограничения количества уведомлений, возникающих при обработке этого события.

Примечание

Событие Changed возникает неожиданно при переименовании файла, но не возникает при переименовании каталога. Чтобы watch переименования, используйте Renamed событие .

Примечание

Порядок, в котором Changed возникает событие по отношению к другим FileSystemWatcher событиям, может измениться, SynchronizingObject если свойство не nullимеет значения .

Применяется к

См. также раздел