2008-09-30 7 views
8

Ich möchte mit Ideen über verteilte Dateisynchronisierung/Replikation experimentieren. Um es effizient zu machen, wenn der Benutzer arbeitet, möchte ich eine Art von Daemon implementieren, um Änderungen in einem Verzeichnis zu überwachen (z. B./home/user/dirToBeMonitored oder c: \ docs und setts \ user \ dirToBeMonitored). So könnte ich wissen, welcher Dateiname zu jedem Zeitpunkt (oder innerhalb eines angemessenen Intervalls) hinzugefügt/geändert/gelöscht wurde.Betriebssystemunabhängige API zur Überwachung des Dateisystems?

Ist dies mit jeder Hoch- und Mittelsprache möglich ?. Kennen Sie eine API (und in welcher Sprache?), Um dies zu tun?

Danke.

+2

OP bittet um eine plattformübergreifende Lösung, keine der folgenden Antworten adressiert dies. Idealerweise sollte eine solche Lösung in einer Low-Level-Sprache wie C++ implementiert werden und dann Bindings für verschiedene Hochsprachen wie Python bereitstellen –

Antwort

9

Eine bonifizierte Antwort, obwohl eine, die eine größere Bibliothek Abhängigkeit erfordert (lohnt es IMO)!

QT bietet die Klasse QFileSystemwatcher, die den nativen Mechanismus der zugrunde liegenden Plattform verwendet.

Noch besser, Sie können die QT-Sprachbindungen für Python oder Ruby verwenden. Here ist eine einfache PyQT4-Anwendung, die QFileSystemWatcher verwendet.

Hinweise

  • Eine gute Referenz auf auf creating deployable PyQT4 apps, vor allem auf OSX sollte aber auch für Windows.
  • Gleiche Lösung vorher gepostet here.
  • Andere plattformübergreifende Toolkits können auch den Trick machen (zum Beispiel GnomeGIO hat GFileMonitor, obwohl es nur UNIX ist und OSX FSEvents Mechanismus afaik nicht unterstützt).
10

Die APIs sind völlig verschieden für Windows, Linux, Mac OS X, und andere Unix Sie nennen kann, so scheint es. Ich kenne keine plattformübergreifende Bibliothek, die dies konsistent behandelt.

0

Und auf OS X heißt es fsevents. Es ist eine API auf Betriebssystemebene, daher ist es am einfachsten, auf C oder C++ zuzugreifen. Es sollte aus fast jeder Sprache zugänglich sein, obwohl Bindungen für Ihre bevorzugte Sprache möglicherweise noch nicht geschrieben wurden.