Мониторинг папок на предмет изменений - PullRequest
0 голосов
/ 31 января 2011

Я работаю над проектом, для которого потребуется приложение, которое просматривает список каталогов, которые пользователь указывает для изменений. Кроме того, я хотел бы дать пользователям возможность запускать приложение как службу или на индивидуальной основе. Поскольку пользователи могут запускать его на индивидуальной основе, я не думаю, что прослушивания какого-либо события операционной системы, вызванного добавлением или удалением файлов (если такие события существуют), было бы достаточно. Я подумал, может быть, вычислить контрольную сумму для самой глубокой папки и затем создать. Затем я мог бы сравнить эти контрольные суммы при последующих проверках, чтобы попытаться точно определить, где произошли изменения. Будет ли это подходящим решением; если нет, то какой лучший способ сделать это эффективно?

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

РЕДАКТИРОВАТЬ: Мне понадобится этот метод для работы в Windows, OS X и в идеале Linux

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

В Mac OSX вы можете использовать FSEvent , что аналогично интерфейсу inotify в Linux.

1 голос
/ 31 января 2011

Существует несколько способов отслеживания изменений.

Самое простое - сканировать каталог по таймеру и сравнивать временные метки и размеры файлов.Однако это требует много ресурсов, и некоторые изменения могут быть пропущены (например, если файл изменился дважды между проверками, первое изменение будет пропущено).

Далее можно использовать FindFirstChangeNotification Функция Windows API (хотя она имеет свои ограничения).

И самый сложный и самый надежный метод - это использовать драйвер фильтра файловой системы.В Windows можно использовать наш CallbackFilter .В MacOS X можно создать драйвер фильтра, но я не знаю ни одного готового к использованию продукта, похожего на CallbackFilter.В Linux можно использовать inotify .

0 голосов
/ 31 января 2011

man kqueue

(по крайней мере, так я бы это делал на моей наиболее часто целевой ОС - но вы должны указать это в своем посте)

0 голосов
/ 31 января 2011

Если файловые системы поддерживают протокол CIFS / SMB, вы можете рассмотреть возможность уведомления об изменении в протоколе.См. http://msdn.microsoft.com/en-us/library/aa302188.aspx для обзора CIFS.

...