Gibt es einen guten Objc-Bibliotheks-Wrapper für Dateisystemereignisse / kqueue, der die rekursive Überwachung für mich übernimmt?

StackOverflow https://stackoverflow.com/questions/5987129

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?

War es hilfreich?

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:)];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top