Ich finde die .Net FileSystemWatcher-Klasse sehr praktisch zum Schreiben von Dienstprogrammen, die automatisch zum Leben erwachen, wenn Dateien in ihren überwachten Ordnern angezeigt werden. Gibt es eine Entsprechung zu dieser Funktionalität in der * nix-Welt, die es mir erlauben würde, einen Ordner (und möglicherweise alle seine Unterverzeichnisse) zu sehen?
Bearbeiten: Vorzugsweise wird dies etwas sein, das keine Kernel-Patches benötigt.
Das wäre Gamin der Dateiänderungs-Monitor oder Inotify .
Bearbeiten: Mono hat Gamin-Bindungen - tatsächlich verwendet seine Implementierung von FileSystemWatcher Gamin. Siehe Ссылка (suche die Seite nach FileSystemWatcher, die FAQ hat leider keine Anker.)
Grüße, Ich möchte meine Beobachtungen mit FileSystemWatcher in Mono in Ubuntu 10.10 teilen. Hier ist eine sehr einfache Implementierung von FileSystemWatcher in C #
%Vor% Dieser Code wurde getestet und funktioniert sowohl unter Windows XP als auch unter Ubuntu 10.10. Ich möchte jedoch darauf hinweisen, dass sich der FileSystemWatcher unter Ubuntu 10.10 (möglicherweise auch frühere Versionen) eindeutig verhält.
Wenn das überwachte Verzeichnis keine Unterverzeichnisse enthält, führt das Aufrufen eines FileSystemWatcher mit der Eigenschaft IncludeSubdirectories auf true dazu, dass FileSystemWatcher Ereignisse ignoriert. Wenn sich jedoch im Zielverzeichnis Unterverzeichnisse befinden, funktioniert IncludeSubdirectories, die auf true festgelegt sind, erwartungsgemäß.
Was immer funktioniert, ist, wenn IncludeSubdirectories auf false gesetzt ist. In diesem Fall überwacht der FileSystemWatcher nur das Zielverzeichnis.
Ich hoffe, dass dies für Programmierer nützlich ist, die Mono über verschiedene Betriebssysteme hinweg verwenden und den FileSystemWatcher-Typ aufrufen möchten.
HühnchenSandwich
Wie schon gesagt, hat Mono die Klasse "System.IO.FileSystemWatcher", das ist der relevante Link: Ссылка
"Monos Umsetzung der FileSystemWatcher hat mehrere Backends. Dies ist notwendig, weil nicht alle Betriebssysteme unterstützt von Mono hat alle notwendigen Funktionen um die erwartete Funktionalität bereitzustellen durch Anwendungen.
Wenn der Betriebssystemkernel unterstützt das Anschauen von Verzeichnissen (inotify auf Linux, KEvents auf BSD oder OSX) Feature wird verwendet; Sonst fällt es zurück zur Verwendung des Gamin oder FAM Bibliotheken (diese Bibliotheken stellen ein API zur Überwachung von Verzeichnissen) und if keine dieser Funktionen sind verfügbar, Mono wird alle 750 Millisekunden abfragen die Verzeichnisse angesehen.
Sie können das Abrufverhalten erzwingen (anstatt die Kernel-Unterstützung zu verwenden) indem Sie den MONO_MANAGED_WATCHER setzen Umgebungsvariable vor der Ausführung Ihre Bewerbung. Dies könnte nützlich sein für Dateisysteme, die dies nicht unterstützen inotify und immer noch Abfragen an Änderungen erkennen. "
Ja, dnotify und inotify .
Ich weiß nicht, ob Mono diese eingepackt hat, aber es wäre es wert, überprüft zu werden.
Wenn Sie die wunderbare QT-Bibliothek (www.qtsoftware.com) verwenden, ist sie als QFileSystemWatcher enthalten.