¿Hay una buena envoltura de la biblioteca de OBJC para los eventos del sistema de archivos / kqueue que maneja la observación recursiva para mí?
-
12-11-2019 - |
Pregunta
Quiero escribir una aplicación OSX (Snow Leopard) que recibe notificaciones cuando se cambian los archivos dentro de un directorio específico, y quiero acceder a la ruta del archivo específico que se cambió.
Sé que puedo hacer esto usando File System Events
o kqueue
. El primero no proporciona los detalles de los cuales se cambió el archivo específico (que me requieren que construya una instantánea del directorio que estoy mirando y luego escanearlo para averiguar qué archivo cambió). Este último no apoya la observación recursiva (que me obliga a agregar relojes a cada archivo y directorio dentro del directorio principal).
He visto a las bibliotecas que manejan la instantánea / diversión de la recursión para mí, pero no puedo encontrar ninguna. El UKKQueue
se parece a una buena envoltura para las cosas de bajo nivel de generación de generación, pero no parece hacer una recursión. Lo mismo para kqueue
. GTMFileSystemKQueue
se parece a una buena envoltura para SCEvents
, pero no parece que se encarga de descubrir el archivo específico que cambió.
¿Hay una biblioteca que haga lo que quiero y es adecuado para un proyecto OBJC para cualquiera de estas tecnologías?
Solución
terminé usando GTMFileSystemKQueue
después de que descubrí lo fácil que es recursivamente el iteración sobre un directorio en 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:)];
}