¿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í?

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

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?

¿Fue útil?

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:)];
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top