Y a-t-il un bon emballage de bibliothèque OBJC pour les événements du système de fichiers / Kqueue qui gère la surveillance récursive pour moi?

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

Question

Je souhaite écrire une application OSX (Snow Leopard) qui reçoit des notifications lorsque les fichiers dans un répertoire spécifique sont modifiés, et je veux accéder au chemin du fichier spécifique qui a été modifié.

Je sais que je peux faire ça en utilisant soit File System Events ou kqueue. Le premier ne fournit pas les détails du fichier spécifique a changé (ce qui m'oblige à construire un instantané du répertoire que je regarde, puis à le scanner pour savoir quel fichier a changé). Ce dernier ne prend pas en charge l'observation récursive (ce qui m'a obligé à ajouter de manière récursive les montres à chaque fichier et répertoire du répertoire parent).

J'ai jeté un coup d'œil aux bibliothèques qui gèrent le plaisir instantané / récursivité pour moi, mais je ne trouve aucune. UKKQueue On dirait un bon emballage pour le bas niveau kqueue Des trucs, mais ne semble pas faire de la récursivité. Pareil pour GTMFileSystemKQueue. SCEvents On dirait un bon wrapper pour File System Events mais ne semble pas gérer la découverte du fichier spécifique qui a changé.

Y a-t-il une bibliothèque qui fait ce que je veux et convient à un projet OBJC pour l'une ou l'autre de ces technologies?

Était-ce utile?

La solution

J'ai fini par utiliser GTMFileSystemKQueue Après avoir découvert à quel point il est facile d'itérer récursivement un répertoire dans OBJC:

// 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:)];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top