Независимый от ОС API для мониторинга файловой системы?

Я хотел бы поэкспериментировать с идеями о распределенной синхронизации/репликации файлов. Чтобы сделать его эффективным, когда пользователь работает, я хотел бы реализовать какой-то демон для отслеживания изменений в каком-либо каталоге (например, /home/user/dirToBeMonitored или c:\docs и setts\user\dirToBeMonitored). Таким образом, я мог бы знать, какое имя файла было добавлено/изменено/удалено каждый раз (или в пределах разумного интервала).

Возможно ли это с любым языком высокого среднего уровня? Знаете ли вы какой-нибудь API (и на каком языке?) для этого?

Спасибо.


person Alex. S.    schedule 30.09.2008    source источник
comment
OP запрашивает кроссплатформенное решение, ни один из приведенных ниже ответов не касается этого. В идеале такое решение должно быть реализовано на языке низкого уровня, таком как C++, а затем обеспечивать привязку к различным языкам высокого уровня, например Python.   -  person Eric Drechsel    schedule 18.07.2009


Ответы (4)


Хороший ответ, хотя и требующий большой зависимости от библиотеки (это того стоит, IMO)!

QT предоставляет класс QFileSystemwatcher, который использует собственный механизм базовой платформы.

Более того, вы можете использовать языковые привязки QT для Python или Ruby. Вот простой PyQT4 приложение, использующее QFileSystemWatcher.

Примечания

  • Хороший справочник по созданию развертываемых приложений PyQT4, особенно в OSX, но должен работать и в Windows.
  • То же самое решение, опубликованное ранее ">здесь.
  • Другие кросс-платформенные наборы инструментов также могут помочь (например, Gnome GIO имеет GFileMonitor, хотя это только UNIX и не поддерживает OSX FSEvents на самом деле).
person Eric Drechsel    schedule 18.07.2009

API совершенно разные для Windows, Linux, Mac OS X и любые другие Unix, которые вы можете назвать, это кажется. Я не знаю ни одной кросс-платформенной библиотеки, которая последовательно справляется с этим.

person Mark Bessey    schedule 01.10.2008

В Linux это называется inotify.

person Neall    schedule 30.09.2008

А в OS X это называется fsevents. Это API уровня ОС, поэтому к нему проще всего получить доступ с C или C++. Он должен быть доступен практически с любого языка, хотя привязки для предпочитаемого вами языка могут быть еще не написаны.

person Adrian    schedule 01.10.2008