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


Класс System.IO.FileSystemWatcher

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

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

Чтобы отслеживать изменения во всех файлах, задайте Filter для свойства пустую строку ("") или используйте wild карта s ("*.*"). Чтобы просмотреть определенный файл, задайте Filter для свойства имя файла. Например, чтобы отслеживать изменения в файле MyDoc.txt, задайте Filter для свойства значение "MyDoc.txt". Вы также можете отслеживать изменения в определенном типе файла. Например, чтобы отслеживать изменения в текстовых файлах, задайте Filter для свойства значение "*.txt".

Существует несколько типов изменений, которые можно отслеживать в каталоге или файле. Например, можно отслеживать изменения в Attributesфайлах LastWrite или Size каталогах, даты и времени. Это делается путем задания NotifyFilter свойства одному из значений NotifyFilters . Дополнительные сведения о типе изменений, которые можно просмотреть, см. в статье NotifyFilters.

Вы можете отслеживать переименование, удаление или создание файлов или каталогов. Например, чтобы отслеживать переименование текстовых файлов, задайте Filter для свойства значение "*.txt" и вызовите WaitForChanged метод с указанным для его параметра параметром Renamed .

Операционная система Windows уведомляет компонент об изменениях файла в буфере, созданном с помощью этой FileSystemWatcherоперационной системы. Если в течение короткого времени существует много изменений, буфер может переполнение. Это приводит к тому, что компонент теряет отслеживание изменений в каталоге, и он будет предоставлять только одеялое уведомление. Увеличение размера буфера со InternalBufferSize свойством является дорогостоящим, так как оно поступает из нестраничной памяти, которая не может быть переключен на диск, поэтому сохраните буфер как небольшой, но достаточно большой, чтобы не пропустить никаких событий изменения файла. Чтобы избежать переполнения буфера, используйте NotifyFilter свойства, IncludeSubdirectories чтобы отфильтровать нежелательные уведомления об изменениях.

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

Рекомендации при использовании FileSystemWatcher класса:

  • Скрытые файлы не игнорируются.
  • В некоторых системах FileSystemWatcher отчеты изменяют файлы с использованием короткого формата имени файла 8.3. Например, можно сообщить об изменении "LongFileName.LongExtension" как "LongFil~". Лон.
  • Этот класс содержит требования связывания и наследования на уровне класса, которые применяются ко всем элементам. Если непосредственно вызывающий оператор или производный класс не имеет разрешения полного доверия, возникает исключение SecurityException. Дополнительные сведения о требованиях безопасности см. в разделе Требования связывания.
  • Максимальный размер свойства для InternalBufferSize мониторинга каталога по сети составляет 64 КБ.

Копирование и перемещение папок

Операционная система и FileSystemWatcher объект интерпретируют действие вырезания и вставки или действие перемещения как действие переименования для папки и его содержимого. Если вы вырезать и вставить папку с файлами в отслеживаемую папку, FileSystemWatcher объект сообщает только папку как новую, но не ее содержимое, так как они по сути переименованы только.

Чтобы получить уведомление о том, что содержимое папок было перемещено или скопировано в отслеживаемую папку, предоставьте OnChanged и OnRenamed методы обработчика событий, как описано в следующей таблице.

Обработчик событий События, обработанные Выполняет
OnChanged Changed, , CreatedDeleted Сообщите об изменениях атрибутов файлов, созданных файлов и удаленных файлов.
OnRenamed Renamed Перечислить старые и новые пути переименованных файлов и папок, расширяя рекурсивно при необходимости.

Размеры событий и буферов

Обратите внимание, что некоторые факторы могут повлиять на события изменения файловой системы, как описано ниже.

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

Обратите внимание, что FileSystemWatcher событие может пропустить при превышении размера буфера. Чтобы избежать отсутствия событий, следуйте приведенным ниже рекомендациям.

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