Функциональный блок (FB) для 4diac FORTE, который отслеживает появление новых файлов в указанной директории. Обладает возможностью фильтрации файлов по расширению, а также генерацией триггерного событие, когда обнаруживает новый файл.
Входы:
DP (directory path) – Вход, путь к директории, в которой выполняется мониторинг файлов.
FE (file extension) – Вход, фильтр по расширению файлов (например: 'png'). Может быть пустым, при отсутствии значение учитываются все файлы.
Выходы:
LF – Выход, имя последнего обнаруженного файла
Out – Выход, количество найденных файлов
LC – Выход, дата и время последнего добавленного файла.
TR – Выход, флажок появления нового файла
Установка
- Склонируйте репозиторий или загрузите содержимое:
git clone https://github.com/illinols/fileFinder.git - Создайте проект в 4diac IDE и зайдите в его директорию
- Перенесите файл
fileFinder.fbtв корневую директорию проекта - Перенесите файл
FORTE.exeв удобную вам директорию - В 4diac IDE перейдите в
windows -> Preferences -> 4diac IDE -> FORTE preferencesи укажите путь к скаченному файлуFORTE.exe - Добавьте все необходимые функциональные блоки в рабочую зону
- Перейдите в
Debug -> Open Simulated Device Manager -> Launch Local FORTE - Вернитесь к рабочей зоне и выбрав ваш проект в
System explorerнажмитеMonitoring System, а затемDeploy
При вводе входных данных обязательно использовать одинарные кавычки, 4diac IDE не примет C:\Users\user\Documents\GitHub, необходимо вводить ‘C:\Users\user\Documents\GitHub\fileFinder’.
Аналогично с расширением файла, но вводить точку перед расширением не обязательно, можно, например, просто ввести ‘png’.
Для зацикленной работы блока стоит подключить к нему стандартный FB E_CYCLE. Частота обновления информации о файлах в директории выставляется через вход DT. Для удобства использования можно добавить FB E_SWITCH, который позволит управлять работой блока без перезапуска FORTE.
Принцип работы:
- При каждом запуске (по событию
REQ) происходит чтение всех файлов в директории. - Если задан фильтр (расширение), происходит дополнительная фильтрация файлов.
- Затем блок сравнивает текущий список файлов с предыдущим
previousFileNamesи определяет, появился ли новый файл. - Если файл новый — его имя сохраняется в
LF, выставляетсяTR = true, а текущее время записывается вLC. - В конце итерации обновляется
previousFileNamesдля последующего сравнения на следующем цикле.
Тестирование
- Ввод фильтра и его удаление в запущенной системе.
- Загрузка файлов с типом "Файл".
- Загрузка файлов с похожими названиями.
- Включение и отключение FB через
E_SWITCH. - Отслеживание папки с поддиректориями.
Пример использования
При создании дополнительного FB можно организовать систему которая будет распределять файлы файлы по разным папкам в зависимости от их формата. Либо мониторинг новых файлов с логированием, что возможно реализовать из блоков стандартной палитры 4diac.
Ограничения:
- Порядок файлов в массиве определяется в алфавитном порядке, а не по дате создания.
- Отслеживается только наличие новых файлов, но не их удаление или изменение.
- При сбросе фильтра все файлы не попадавшие под него считываются блоком как новые.
- Анализируется только указанная директория, без вложенных папок.
Возможные улучшения
- Выводить информацию о удаленных файлах между циклами.
- Анализ вложенных папок.
- При большом объёме файлов внедрить кэширование.
