Привет, может немного не по адресу, но вроде тут очень разная аудитория…
Мне вот интересно в природе существуют нормальные либы (высокоуровневае) для отслеживания изменения файлов?
Когда-то долго пытался добиться нужного результата на C# (file system watcher). В итоге из багов и лимитов так и не вылез. Потом другие вотчеры смотрел… Вот недавно решил посмотреть что там в rust (rsnotify) - те же грабли.
Я так понял что задача не решима на уровне системного апи и решается только полингом.
Может я чего-то не понимаю?
Задача вроде бы казалось банальная:
Допустим есть некий конфиг. Из него выдираются пути к файлам(потенциально много, допустим несколько тысяч).
При изменении файла - производится некой действие.
Все что хочется - это корректной обработки исключений!!! И тут начинается…
В конфиге стоит путь: D:/test/test.txt
Я переименовываю test в test2 - в итоге новый путь казалось бы уже не имеет отношения к делу, но файл продолжает мониториться…
Как я пытался решит проблему:
- тупо ставить мониторинг на корень, но так вообще ахтунг по перформэнсу особенно если на системный диск поставить вотчер
- по списку фалов строить дерево(аля shadow file system) и вешать витчеры по какому то хитрому механизму на его ноды.
2-й вариант вроде бы более менее приемлемый но куча нюансов:
а. изначальный список(по которому строится дерево) может часто меняться
б. дерево должно поддерживать многопоточность (в купе с 1-м тоже по перформэнсу бьёт)
в. есть вроде лимит в некоторых ОС на кол-во отрытых файловых дескрипторов (то есть в какой то момент все мот перестать работать)
г. дерево все равно не защищает от потенциального затыка по перформэнсу(в какой то ноде мот быть большое число файлов с которыми работают другие программы).
Я вот только не понимаю как с этим борются в IDE. Что если у меня проект на 100500 файлов все тупо полится будут?