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?
-
12-11-2019 - |
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?
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:)];
}