Gibt es einen guten Objc-Bibliotheks-Wrapper für Dateisystemereignisse / kqueue, der die rekursive Überwachung für mich übernimmt?
-
12-11-2019 - |
Frage
Ich möchte eine OSX-App (Snow Leopard) schreiben, die Benachrichtigungen erhält, wenn Dateien in einem bestimmten Verzeichnis geändert werden, und ich möchte Zugriff auf den Pfad der bestimmten Datei, die geändert wurde.
Ich weiß, dass ich das auch mit machen kann File System Events
oder kqueue
.Ersteres enthält keine Details darüber, welche bestimmte Datei geändert wurde (ich muss einen Schnappschuss des Verzeichnisses erstellen, das ich mir ansehe, und ihn dann scannen, um herauszufinden, welche Datei geändert wurde).Letzteres unterstützt keine rekursive Überwachung (ich muss jeder Datei und jedem Verzeichnis im übergeordneten Verzeichnis rekursiv Überwachungen hinzufügen).
Ich habe nach Bibliotheken gesucht, die den Snapshot- / Rekursionsspaß für mich bewältigen, kann aber keine finden. UKKQueue
sieht aus wie ein guter Wrapper für das niedrige Level kqueue
zeug, scheint aber keine Rekursion zu machen.Gleiches gilt für GTMFileSystemKQueue
. SCEvents
sieht aus wie ein guter Wrapper für File System Events
scheint aber nicht damit fertig zu werden, die spezifische Datei herauszufinden, die sich geändert hat.
Gibt es eine Bibliothek, die das tut, was ich will und die für ein Objc-Projekt für eine dieser Technologien geeignet ist?
Lösung
Ich habe am Ende benutzt GTMFileSystemKQueue
nachdem ich herausgefunden habe, wie einfach es ist, ein Verzeichnis in objc rekursiv zu durchlaufen:
// Create a directory enumerator for the given top level directory
NSDirectoryEnumerator *de = [[NSFileManager defaultManager] enumeratorAtPath:dir];
// Add a kqueue on every file and folder below the top level
NSString *file;
while ((file = [de nextObject])) {
[[GTMFileSystemKQueue alloc] initWithPath:[dir stringByAppendingString:file]
forEvents:kGTMFileSystemKQueueAllEvents
acrossReplace:YES
target:self
action:@selector(fileSystemKQueue:events:)];
}