Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Используется FileSystemWatcher для отслеживания изменений в указанном каталоге. Вы можете отслеживать изменения в файлах и подкаталогах указанного каталога. Вы можете создать компонент для просмотра файлов на локальном компьютере, сетевом диске или удаленном компьютере.
Чтобы отслеживать изменения во всех файлах, задайте Filter для свойства пустую строку ("") или используйте подстановочные знаки ("*.*"). Чтобы следить за определенным файлом, установите свойство 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~.Lon".
- Этот класс содержит запрос ссылки и запрос наследования на уровне класса, которые применяются ко всем членам. SecurityException возникает, когда ни непосредственный вызывающий объект, ни производный класс не имеют разрешения на полное доверие. Дополнительные сведения о требованиях к безопасности см. в разделе "Требования ссылки".
- Максимальный размер свойства для InternalBufferSize мониторинга каталога по сети составляет 64 КБ.
Копирование и перемещение папок
Операционная система и FileSystemWatcher объект интерпретируют действие вырезания и вставки или действие перемещения как действие переименования для папки и его содержимого. Если вы вырезаете и вставляете папку с файлами в отслеживаемую папку, FileSystemWatcher объект сообщает только о папке как о новой, но не о ее содержимом, так как оно по сути просто переименовывается.
Чтобы получить уведомление о том, что содержимое папок было перемещено или скопировано в отслеживаемую папку, предоставьте OnChanged и OnRenamed методы обработчика событий, как описано в следующей таблице.
Обработчик событий | События, обработанные | Выполняет |
---|---|---|
OnChanged | Changed, , CreatedDeleted | Сообщите об изменениях атрибутов файлов, созданных файлов и удаленных файлов. |
OnRenamed | Renamed | Перечислить старые и новые пути переименованных файлов и папок, расширяя рекурсивно при необходимости. |
Размеры событий и буферов
Обратите внимание, что некоторые факторы могут повлиять на события изменения файловой системы, как описано ниже.
- Распространенные операции файловой системы могут вызывать несколько событий. Например, при перемещении файла из одного каталога в другой может возникать несколько OnChanged и некоторые OnCreated и OnDeleted события. Перемещение файла — это сложная операция, состоящая из нескольких простых операций, поэтому вызывает несколько событий. Аналогичным образом, некоторые приложения (например, антивирусное программное обеспечение) могут вызвать дополнительные события файловой системы, обнаруженные FileSystemWatcher.
- Диски FileSystemWatcher можно просматривать, пока они не переключаются или не удаляются. Элемент FileSystemWatcher не вызывает события для CD-дисков и DVD-дисков, так как метки времени и свойства не могут изменяться. Удаленные компьютеры должны иметь одну из необходимых платформ, установленных для правильной работы компонента.
Обратите внимание, что FileSystemWatcher событие может пропустить при превышении размера буфера. Чтобы не пропустить события, следуйте этим рекомендациям.
- Увеличьте размер буфера, задав свойство InternalBufferSize.
- Избегайте просмотра файлов с длинными именами файлов, так как длинное имя файла способствует заполнению буфера. Рекомендуется переименовать эти файлы с помощью более коротких имен.
- Оставьте код обработки событий максимально коротким.