Мониторинг изменений в файловой системе
Если вам необходимо следить за изменениями файлов в одном или нескольких каталогах (например, содержащих файлы журнала и дампы памяти), вы можете использовать экземпляр типа МониторФайловойСистемы. Функция мониторинга поддерживается для всех операционных систем (Windows, Linux и macOS).
Чтобы начать работу с монитором, вызовите метод Отслеживать() типа МониторФайловойСистемы и укажите каталог для отслеживания, как описано ниже. Для завершения работы монитора вызовите метод Закрыть().
Задать каталог для отслеживания изменений
Создайте экземпляр типа Файл и передайте его в метод Отслеживать() типа МониторФайловойСистемы, чтобы задать путь к каталогу, изменения в котором вы хотите отслеживать. Если каталог не найден или указанный элемент файловой системы не является каталогом, то выбрасывается ИсключениеНедопустимыйАргумент.
пер Каталог = новый Файл("C:\\TargetDirectory")
исп Монитор = новый МониторФайловойСистемы()
Монитор.Отслеживать(Каталог)
Если указанный каталог содержит вложенные каталоги, вы можете использовать параметр Глубина, чтобы указать, сколько уровней вложенности должен учитывать монитор при отслеживании изменений:
пер Каталог = новый Файл("C:\\TargetDirectory")
исп Монитор = новый МониторФайловойСистемы()
Монитор.Отслеживать(Каталог, Глубина = 3)
Если вам необходимо отслеживать изменения только определенных файлов в каталоге, используйте параметр ИменаФайлов, чтобы указать нужные файлы. Вы можете задать шаблон поиска или регулярное выражение для фильтрации файлов. Например, чтобы отслеживать изменения только в лог-файлах, используйте следующий фильтр:
пер Каталог = новый Файл("C:\\TargetDirectory")
исп Монитор = новый Монито рФайловойСистемы()
Монитор.Отслеживать(Каталог, ИменаФайлов = "*.log")
Указать вид событий для отслеживания
Элементы перечисления ВидСобытияФайловойСистемы позволяют вам указать, какие виды событий файловой системы необходимо отслеживать. Поддерживаются следующие виды событий:
Создание— создание файла или подкаталога;Удаление— удаление файла или подкаталога;Изменение— изменение файла или подкаталога;ПотеряСобытий— специальное событие, указывающее на потерю событий файловой системы. Это происходит, когда файловая система не успевает обработать поступающие события и буфер событий переполняется. Рекомендуем вам обрабатывать это событие отдельно: например, полностью пересмотреть каталог и заново выполнить все необходимые операции.
В примере ниже показано, как отслеживать появление новых файлов в каталоге:
пер Каталог = новый Файл("C:\\TargetDirectory")
исп Монитор = новый МониторФайловойСистемы()
Монитор.Отслеживать(Каталог, ВидыСобытий = ВидСобытияФайловойСистемы.Создание)
Получить и обработать события файловой системы
Для получения и обработки событий файловой системы используйте метод ПолучитьСобытия() типа МониторФайловойСистемы. Данный метод возвращает массив объектов СобытиеФайловойСистемы, содержащих информацию о полученных событиях (вид события и Файл, для которого это событие произошло). Используйте параметр Таймаут, чтобы указать длительность ожидания новых событий, если в данный момент очередь событий пуста. Если по истечении указанного времени ни одно событие не произошло, метод ПолучитьСобытия возвращает пустой массив. Если Таймаут не указан, о жидание происходит неограниченно долго, пока не будет зарегистрировано событие, удовлетворяющее настройкам поиска.
Пример ниже демонстрирует использование экземпляра МониторФайловойСистемы для отслеживания и обработки изменений в двух каталогах. Для первого каталога отслеживаются все файлы и все типы изменений, для второго — только удаление текстовых файлов.
пер Каталог1 = новый Файл("C:\\Directory1")
пер Каталог2 = новый Файл("C:\\Directory2")
исп Монитор = новый МониторФайловойСистемы()
// Создайте методы для изначальной обработки
// имеющихся в каталоге файлов и подкаталогов
// ОбработатьВесьКаталог(Каталог1)
// ОбработатьВесьКаталог(Каталог2)
Монитор.Отслеживать(Каталог1)
Монитор.Отслеживать(Каталог2,
ВидыСобытий = ВидСобытияФайловойСистемы.Удаление,
ИменаФайлов = "*.txt")
пока Истина
// Ожидание новых событий
пер МассивСобытий = Монитор.ПолучитьСобытия()
для Событие из МассивСобытий
если Событие.ВидСобытия == ВидСобытияФайловойСистемы.Создание
// Создайте метод для обработки событий создания файлов.
// Используйте свойство "Событие.Файл", чтобы получить
// информацию о созданном файле
// ОбработатьСоздание(Событие)
;
если Событие.ВидСобытия == ВидСобытияФайловойСистемы.Удаление
// Создайте метод для обработки событий удаления файлов.
// Используйте свойство "Событие.Файл", чтобы получить
// информацию об удаленном файле
// ОбработатьУдаление(Событие)
;
если Событие.ВидСобытия == ВидСобытияФайловойСистемы.ПотеряСобытий
// Заново обработайте весь каталог при потере событий
// ОбработатьВесьКаталог(Событие.Файл)
;
;
;