Как контролировать каталог для файлов в Delphi XE?

Возможный дубликат:
уведомление Delphi, когда файл обновляется

Нужен мониторинг для создания файлов и их подсчет. ОС: WinXP и выше.


person axissoft    schedule 23.04.2011    source источник


Ответы (2)


В прошлом году у меня была такая же потребность, и я попробовал Iztok Kacin's Directory Watch. Он ответил на электронную почту и был очень полезным в ответах на мои вопросы.

Его код работал, но мне нужно было получить уведомление в тот момент, когда файл в определенной папке был закрыт, что по какой-то странной причине API ReadDirectoryChanges (от которого это зависит) от Microsoft (безумно) не не обеспечивают. Я также, кажется, припоминаю, что код Iztok использовал потоки и не казался достаточно легким для моих нужд.

В итоге я использовал удивительно простой подход, который прекрасно сработал для меня. В событии TTimer, которое срабатывает каждые несколько секунд, я использую FindFirst для отслеживаемой папки. Все найденные файлы помещаются в постоянный список TStringList. Любой найденный файл, которого еще нет в StringList из предыдущих событий TTimer, является новым. (Чтобы определить, закрыт ли файл, я пытаюсь открыть файл в монопольном режиме. Если я не могу его открыть, значит, он не добавляется в TStringList, поэтому он проверяется при следующем событии.)

Я очень не решался использовать этот подход, думая, что это слишком грубая сила. Но для нужд, которые у меня были, это решение прекрасно сработало и, к счастью, включает в себя небольшое количество очень простого кода, который легко понять и поддерживать.

ХТН

person RobertFrank    schedule 23.04.2011
comment
Почему кто-то проголосовал против моего ответа выше? - person RobertFrank; 24.04.2011
comment
Обратите внимание, что в этой библиотеке есть небольшая ошибка. Вам нужно добавить Terminate в TDirWatchThread.Execute (после SignalError (ErrorMessage)) - без этого он входит в бесконечный цикл, когда вы удаляете все файлы из папки, а затем саму папку! - person Z80; 22.04.2017

Вы можете ознакомиться с этой статьей (класс монитора каталогов для Delphi) , а также у этой функции из Windows API: ReadDirectoryChanges

Вам также следует взглянуть на этот вопрос SO, поскольку он может соответствовать вашим потребностям: Delphi уведомление при обновлении файла

person yms    schedule 23.04.2011