Практическое руководство. Настройка экземпляров компонента FileSystemWatcher

Обновлен: Ноябрь 2007

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

Определение каталогов для наблюдения

Для определения каталогов, за которыми будет следить компонент FileSystemWatcher, используется два свойства: Path и IncludeSubdirectories.

Указание полного пути к корневому каталогу, за которым будет вестись наблюдение

  • Задайте свойство Path уже существующему экземпляру компонента, как показано в следующем фрагменте кода:

    Dim MyWatcher As New System.IO.FileSystemWatcher()
    MyWatcher.Path = "c:\"
    
         System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            MyWatcher.Path = "c:\\";
    

    Эта настройка может быть в виде стандартного пути (c:\directory) или в формате UNC (\\\server\directory).

Свойство IncludeSubdirectories указывает, требуется ли наблюдение за вложенными папками в корневом каталоге. Если свойству задано значение true, компонент наблюдает за вложенными папками так же, как и за корневым каталогом.

Определение изменений для наблюдения

В дополнение к указанию каталогов, можно задать отдельные файлы и типы изменений, за которыми требуется наблюдение. Отчасти наблюдаемые изменения можно определить, задав обработчики только для представляющих интерес событий. Например, если требуется лишь уведомление о создании файлов, достаточно определить обработчик для события Created. Однако можно установить ряд свойств, еще больше ограничивающих область деятельности компонента.

Свойство Filter можно использовать для указания конкретного файла или шаблона, ограничивающего деятельность компонента только наблюдением за определенными файлами или каталогами в корневом каталоге. Например, если требуется наблюдение за созданием текстовых файлов в корневом каталоге, необходимо задать свойству Filter значение "*.txt" и создать обработчик для события Created. В фильтре можно задать любое значение, включая все допустимые расширения файлов. Значение по умолчанию "*.*" возвращает все элементы; "" (пустая строка) также возвращает все файлы или каталоги. Однако одновременно можно задать только одну строку фильтра. При необходимости фильтр можно изменить после того, как компонент FileSystemWatcher начнет получать события.

s95844w4.alert_note(ru-ru,VS.90).gifПримечание.

Компонент FileSystemWatcher предназначен для наблюдения за изменениями в каталоге, а не за изменениями атрибутов каталога. Например, если наблюдаемый каталог называется c:\MyProjects, компонент будет следить за изменениями внутри каталога, но не за изменениями, происходящими с самим каталогом.

Для дальнейшего ограничения изменений, на которые будет реагировать компонент, можно также использовать свойство NotifyFilter. С помощью свойства NotifyFilter можно наблюдать за изменениями имен каталогов, имен файлов или и тех, и других. Кроме того, свойство NotifyFilter содержит ряд значений, ограничивающих событие Changed. Событие Changed способно вызывать множество событий, поскольку оно вызывает событие при каждом изменении соответствующего файла. Некоторые обычные операции, такие как копирование и перемещение файла, вызовут сразу несколько событий, связанных с изменением файла, поскольку при этом меняются различные атрибуты, такие как размер, время внесения последних изменений и время последнего доступа.

Свойство NotifyFilter ограничивает количество изменений файла или каталога, для которых экземпляр компонента вызывает события. Можно настроить компонент таким образом, что он будет вызывать события только при изменении имени файла или каталога, атрибутов элемента в главном каталоге, размера файла, времени внесения последних изменений или времени последнего доступа, а также безопасного доступа к файлу или прав доступа к каталогу. Все эти значения являются частью перечисления NotifyFilters. Можно установить несколько наблюдаемых изменений, используя BitOr (для Visual Basic) или оператор | (для Visual C#), как показано в примере ниже.

s95844w4.alert_note(ru-ru,VS.90).gifПримечание.

Чтобы компонент FileSystemWatcher начал наблюдать за изменениями, свойству EnableRaisingEvents необходимо задать значение true.

Настройка экземпляра компонента FileSystemWatcher

  1. Создайте экземпляр компонента FileSystemWatcher. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента FileSystemWatcher.

  2. Задайте в свойстве Path полный путь к корневому каталогу, за которым будет следить компонент.

    s95844w4.alert_note(ru-ru,VS.90).gifСовет.

    Данный путь к файлу можно задать как в стандартной форме, так и в формате UNC.

  3. Задайте остальные необязательные свойства экземпляра.

    Сценарий

    Свойство

    Значение

    Наблюдение за изменениями определенного файла или вложенной папки корневого каталога

    Filter

    Знаки подстановки, задающие шаблон, который ограничивает область деятельности экземпляра

    Наблюдение за изменениями во всех вложенных папках, содержащихся в корневом каталоге

    IncludeSubdirectories

    true или false

    Наблюдение за определенными изменениями файлов или вложенных папок для событий Changed, Renamed, Deleted или Created

    NotifyFilter

    Любое из имеющихся значений в перечислении NotifyFilters

  4. Активируйте экземпляр компонента, задав свойству EnableRaisingEvents значение true.

    Например, требуется создать экземпляр компонента FileSystemWatcher для наблюдения за созданием .txt файлов в каталоге "reports". Также необходимо следить за изменениями существующих отчетов, обновляющихся динамически при появлении новых данных. Компонент можно настроить следующим образом:

    ' This needs to be declared in a place where it will not go out of scope.
    ' For example, it would be a class variable in a form class.
    Dim MyWatcher As New System.IO.FileSystemWatcher()
    ' This code would go in one of the initialization methods of the class.
    MyWatcher.Path = "c:\"
    ' Watch only for changes to *.txt files.
    MyWatcher.Filter = "*.txt"
    MyWatcher.IncludeSubdirectories = False
    ' Filter for Last Write changes.
    MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite
    ' Example of watching more than one type of change.
    MyWatcher.NotifyFilter = _
       System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size
    ' Enable the component to begin watching for changes.
    MyWatcher.EnableRaisingEvents = True
    
         // This needs to be declared in a place where it will not go out of scope.
            // For example, it would be a class variable in a form class.
            System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            // This code would go in one of the initialization methods of the class.
            MyWatcher.Path = "c:\\";
            // Watch only for changes to *.txt files.
            MyWatcher.Filter = "*.txt";
            MyWatcher.IncludeSubdirectories = false;
            // Enable the component to begin watching for changes.
            MyWatcher.EnableRaisingEvents = true;
            // Filter for Last Write changes.
            MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
            // Example of watching more than one type of change.
            MyWatcher.NotifyFilter =
               System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
    

См. также

Задачи

Практическое руководство. Создание экземпляров компонента FileSystemWatcher

Основные понятия

Знакомство с наблюдением за событиями файловой системы