2012-04-15 15 views
1

Ich bin auf der Suche nach einem Cross-Plattform-Dateisystem Beobachter, ähnlich der FileSystemWatcher Klasse in .NET. Da es für einen Daemon/Service ist, bin ich nicht scharf auf Qt QFileSystemWatcher. Ich möchte es wirklich vermeiden, da ich keine Abhängigkeit von Qt haben möchte, da mein Programm ein Daemon sein wird.Cross-Plattform-C++ Dateisystem-Wächter

Ich habe auch eine proposal für eine solche Klasse in Boost enthalten, aber soweit ich weiß, ist eine solche Klasse noch nicht enthalten.

Gibt es einen plattformübergreifenden C++ - Dateisystemwatcher?

Antwort

4

Qt ist in modules unterteilt, daher bedeutet die Verwendung dieser Funktion nicht, dass Sie die GUI-Bibliothek verwenden müssen.

QFileSystemWatcher ist in QtCore, die keine GUI-Funktionalität hat.

+0

Ich wollte gerade das sagen. Er könnte immer noch argumentieren, dass QtCore zu groß ist. Aber ja, es ist immer noch ein fairer Deal in Anbetracht der Menge an Arbeit, die unterstützt inotify, kqueue, WaitForMultipleObjects in der gleichen Implementierung benötigt. – dschulz

+0

[wxWidgets] (http://www.wxwidgets.org/) hat auch eine [wxFileSystemWatcher] (http://docs.wxwidgets.org/trunk/classwx_file_system_watcher.html) Implementierung, aber es hat einige Einschränkungen. – dschulz

+0

@dschulz, und unter Berücksichtigung, dass er mit der .NET System.dll (und alles, was System.dll direkt oder indirekt für eine bestimmte Plattform abhängt) vergleicht, die nicht für svelte bekannt ist. –

2

Ich habe dies nicht verwendet (ich kam zu dieser Frage auf der Suche nach Alternativen), aber http://code.google.com/p/simplefilewatcher scheint eine gute Option zu sein. Es wird derzeit nicht gepflegt, aber die relevanten APIs sind wahrscheinlich ziemlich stabil. Ich werde versuchen, mich daran zu erinnern, diese Antwort zu aktualisieren, wenn ich diese Bibliothek verwende.

+0

einfache Dateiüberwachung ist auf Mac OSX aufgrund der Verwendung von kqueue begrenzt. QFileWatcher ist, was Sie verwenden möchten. – hhamm

0

Als Alternative gibt es auch "Entropia-System Watcher Datei"

https://bitbucket.org/SpartanJ/efsw, die eine Gabel des einfachen-Datei-Watcher ist.

efsw unterstützt derzeit die folgenden Plattformen:

Linux über inotify

Windows über I/O Completion Ports

Mac OS X über FSEvents oder kqueue

FreeBSD/BSD über kqueue

Betriebssystemunabhängiger generischer Watcher (Abruf der Festplatte für Richt ( Schnappschüsse und Vergleiche von Zeit zu Zeit)

Wenn eines der Back-End aus irgendeinem Grund nicht startet, wird Fallback auf die Betriebssystem-unabhängige Implementierung.