2011-05-13 7 views
5

Quiero escribir una aplicación OSX (Snow Leopard) que recibe notificaciones cuando se cambian los archivos dentro de un directorio específico, y quiero acceso a la ruta del archivo específico que se modificó.¿Hay una buena envoltura de biblioteca objc para File System Events/kqueue que maneja la observación recursiva para mí?

Sé que puedo hacer esto usando File System Events o kqueue. El primero no proporciona los detalles de qué archivo específico cambió (lo que me obliga a crear una instantánea del directorio que estoy viendo y luego analizarlo para averiguar qué archivo ha cambiado). Este último no es compatible con la observación recursiva (que me obliga a agregar relojes recursivamente a cada archivo y directorio dentro del directorio principal).

He echado un vistazo a las bibliotecas que manejan la instantánea/la diversión de recursividad para mí, pero no puedo encontrar ninguna. UKKQueue parece una buena envoltura para las cosas de bajo nivel kqueue, pero no parece que se repita. Lo mismo para GTMFileSystemKQueue. SCEvents parece una buena envoltura para File System Events pero no parece ser útil averiguar el archivo específico que ha cambiado.

¿Hay una biblioteca que hace lo que quiero y es adecuada para un proyecto objc para cualquiera de estas tecnologías?

+0

> OSX 10.7 que puede utilizar: FSEvents. También distribuye la ruta del archivo de origen. – eonist

Respuesta

0

Terminé usando GTMFileSystemKQueue después descubrí lo fácil que es para recorrer de forma recursiva en un directorio en el 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:)]; 
} 
+0

También uso GTMFileSystemKQueue como tú. Pero cambio un archivo en TextEdit y no se responde ningún evento en mi aplicación. ¿Podría darnos un consejo? – scorpiozj

Cuestiones relacionadas