Какой самый простой способ отслеживать изменения в одном файле?

Должен ли я смотреть на уведомления оболочки? Есть ли хороший бесплатный компонент или пример исходного кода?

Или я должен просто запустить односекундный таймер и периодически проверять временную метку файла?

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


person Mawg says reinstate Monica    schedule 17.10.2012    source источник
comment
Э, самое простое, что работает, это опрос. Но это также наименее элегантно.   -  person David Heffernan    schedule 17.10.2012
comment
@ Дэвид, он все равно будет своего рода опросом. AFAIR Windows не может сообщить о деталях изменений, все, что она делает, это говорит пересканировать эту папку, в ней что-то изменилось. Но он может опросить по событию, а не по таймеру.   -  person Arioch 'The    schedule 17.10.2012
comment
@Arioch'The Не уверен насчет папок, но Windows может сообщать о подробных изменениях в одном файле, о чем здесь и спрашивают.   -  person GolezTrol    schedule 17.10.2012
comment
@DavidHeffernan 1 Меня не волнуют слоны, пока это работает - просто   -  person Mawg says reinstate Monica    schedule 18.10.2012
comment
@Golelz - понятно, спасибо. Оказывается, XP представила новый API для Linux :-) Старая Windows не предоставляла подробной информации, которой нет даже в примерах MSDN: msdn.microsoft.com/en-us/library/windows/desktop/aa365261.aspx   -  person Arioch 'The    schedule 18.10.2012


Ответы (2)


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

Но вы можете сами создать «Монитор», который инкапсулирует фактический код мониторинга. Этот монитор вызывает событие, если файл был изменен. Этот ваш монитор может сначала инкапсулировать таймер (простая двухминутная работа), но его можно модифицировать для использования уведомлений оболочки позже (лучше), без необходимости изменять всю логику вашего приложения.

person GolezTrol    schedule 17.10.2012
comment
+1 и ответ. В конце концов, я решил KISS и выбрал односекундный таймер и метод Embarcadero для получения метки времени файла (edn.embarcadero.com/article/15541). - person Mawg says reinstate Monica; 18.10.2012

Jedi VCL наследует change-notification/folder-monitor от RxLib.
RxLib также может быть доступна для более старых версий Дельфы

Кстати, вы не указали версию Delphi. Пожалуйста, нажмите ссылку RETAG и добавьте правильный тег.

person Arioch 'The    schedule 17.10.2012
comment
+1 Спасибо, я посмотрю на это. Я до сих пор не использую Jedi, но вижу так много упоминаний об этом, что думаю, что должен. XE2 старт, кстати. - person Mawg says reinstate Monica; 18.10.2012
comment
спасибо за упоминание вашей версии, но, пожалуйста, нажмите ссылку RETAG и добавьте правильный тег. Ваша версия будет видна поисковой системе и новым читателям. Есть тэги - пожалуйста, используйте их. - person Arioch 'The; 18.10.2012
comment
да, я знаю, но я надеюсь, что новички изучают местные обычаи как можно раньше :-) - person Arioch 'The; 19.10.2012