Библиотека для отслеживания изменений в файловой системе на языке OneScript.
FileWatcher позволяет отслеживать изменения файлов в указанном каталоге, включая:
- Изменение содержимого файлов (через сравнение MD5 хешей)
- Добавление новых файлов
- Удаление файлов
- Изменение структуры каталогов
Библиотека работает только в асинхронном (фоновом) режиме через фоновые задания OneScript.
opm install filewatcher#Использовать filewatcher
// Обработчик изменений
Процедура ОбработатьИзменения(СтруктураИзменена, ИзмененныеФайлы, ТекущаяСтруктура)
Если СтруктураИзменена Тогда
Сообщить("Структура каталога изменена");
КонецЕсли;
Для Каждого Файл Из ИзмененныеФайлы Цикл
Сообщить("Файл изменен: " + Файл.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
// Создаем экземпляр сканера
Сканер = Новый СканерИзмененийФайлов("/путь/к/каталогу", 1000);
// Настраиваем фильтры
Сканер.УстановитьМаску("*.os")
.ДобавитьКаталогИсключения("/подкаталог");
// Запускаем мониторинг в фоновом режиме
Сканер.Запустить(Новый Действие(ЭтотОбъект, "ОбработатьИзменения"));#Использовать filewatcher
Сканер = Новый СканерИзмененийФайлов("/путь/к/каталогу", 1000);
Сканер.РежимМониторингаСканирования(); // Включает вывод времени сканирования
Сканер.Запустить(Обработчик);Новый СканерИзмененийФайлов(ПутьККаталогу, ИнтервалСканирования = 1000)Параметры:
ПутьККаталогу(Строка) - путь к каталогу для отслеживанияИнтервалСканирования(Число) - интервал между сканированиями в миллисекундах (по умолчанию 1000)
Устанавливает маску для фильтрации файлов.
Параметры:
Маска(Строка) - маска файлов (например, ".txt", ".os")
Пример:
Сканер.УстановитьМаску("*.os");Добавляет каталог в список исключений. Путь указывается относительно основного каталога.
Параметры:
ПутьККаталогу(Строка) - относительный путь к каталогу (например, "/подкаталог")
Пример:
Сканер.ДобавитьКаталогИсключения("/node_modules");Включает режим мониторинга производительности сканирования. При включенном режиме выводится время каждого сканирования в миллисекундах.
Запускает сканирование каталога в фоновом задании.
Параметры:
Обработчик(Действие) - обработчик изменений (обязателен)
Обработчик должен иметь следующую сигнатуру:
Процедура Обработчик(ИзмененаСтруктура, ИзмененныеФайлы, ТекущаяСтруктура)
// ИзмененаСтруктура - Булево, Истина если была изменена структура каталогов
// ИзмененныеФайлы - Массив из Файл, список измененных файлов
// ТекущаяСтруктура - Массив из Файл, текущее состояние файлов
КонецПроцедурыУстанавливает флаг завершения сканирования. Циклическое сканирование прервется при следующей итерации.
- Быстрое сравнение: Использует MD5 хеши для определения изменений файлов
- Гибкая фильтрация: Поддержка масок файлов и исключения каталогов
- Асинхронность: Работа только в фоновом режиме через фоновые задания OneScript без блокировки основного потока
- Мониторинг производительности: Встроенный режим для отслеживания времени сканирования
- OneScript версии 2.0.0 или выше
См. файл LICENSE
Андрей Савадеров (Macegor)
Email: savaderov.andrei@gmail.com
https://github.com/Macegor/filewatcher
- Удален синхронный режим работы: Библиотека теперь работает только в асинхронном режиме через фоновые задания OneScript
- Изменен конструктор: Удален параметр
ВыполнятьВФоне(теперь всегда работает в фоне)// Было (0.1.0): Новый СканерИзмененийФайлов(ПутьККаталогу, ВыполнятьВФоне = Ложь, ИнтервалСканирования = 1000) // Стало (0.2.0): Новый СканерИзмененийФайлов(ПутьККаталогу, ИнтервалСканирования = 1000)
- Изменен метод
Запустить: ПараметрОбработчиктеперь обязателен (не может бытьНеопределено)// Было (0.1.0): Сканер.Запустить(Обработчик = Неопределено) // Можно было вызывать без обработчика // Стало (0.2.0): Сканер.Запустить(Обработчик) // Обработчик обязателен
Миграция с версии 0.1.0:
Если вы использовали синхронный режим:
// Старый код (0.1.0):
Сканер = Новый СканерИзмененийФайлов("/путь", Ложь, 1000);
Сканер.Запустить(); // Синхронный режим
// Новый код (0.2.0):
Сканер = Новый СканерИзмененийФайлов("/путь", 1000);
Сканер.Запустить(Новый Действие(ЭтотОбъект, "Обработчик")); // Только фоновый режимЕсли вы использовали фоновый режим:
// Старый код (0.1.0):
Сканер = Новый СканерИзмененийФайлов("/путь", Истина, 1000);
Сканер.Запустить(Обработчик);
// Новый код (0.2.0):
Сканер = Новый СканерИзмененийФайлов("/путь", 1000);
Сканер.Запустить(Обработчик);