Estoy usando la API FSEvents para recibir notificaciones de cambios en un directorio local que estoy rastreando.¿Es posible utilizar FSEvents para recibir notificaciones de que se ha movido una carpeta?
¿Es posible obtener una notificación de que el directorio visto se ha movido a otra ubicación en el disco, utilizando FSEvents o cualquier otra cosa?
Actualización:
Aquí está el código que tengo hasta ahora, ahora estoy tratando de usar la bandera kFSEventStreamCreateFlagWatchRoot con FSEventStreamCreate para obtener la raíz cambió la notificación, hasta ahora sin éxito.
- (void)registerForFileSystemNotifications {
NSString *watchedDirectoryPath = [[NSUserDefaults standardUserDefaults] valueForKey:kMyWatchedDirectoryPathKey];
self.watchedDirectoryFileDescriptor = open([watchedDirectoryPath cStringUsingEncoding:NSUTF8StringEncoding], O_RDONLY);
NSArray *paths = [NSArray arrayWithObject:watchedDirectoryPath];
void *appController = (void *)self;
FSEventStreamContext context = {0, appController, NULL, NULL, NULL};
FSEventStreamRef streamRef = FSEventStreamCreate(NULL,
&fsevents_callback,
&context,
(CFArrayRef) paths,
kFSEventStreamEventIdSinceNow,
(CFTimeInterval)2.0,
kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot);
FSEventStreamScheduleWithRunLoop(streamRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
FSEventStreamStart(streamRef);
}
void fsevents_callback(ConstFSEventStreamRef streamRef,
void *userData,
size_t numumberOfEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[]) {
MyAppController *appController = (MyAppController *)userData;
char *newPath = calloc(4096, sizeof(char));
int pathIntPointer = (int)newPath;
int length = fcntl(appController.watchedDirectoryFileDescriptor, F_GETPATH, pathIntPointer);
NSString *newPathString = [[NSString alloc] initWithBytes:newPath length:(NSUInteger)length encoding:NSUTF8StringEncoding];
NSLog(@"newPathString: %@", newPathString); // empty
}
Gracias! Estoy intentando esto ahora, pero hasta ahora sin suerte. He agregado mi código actual a la pregunta. El único ejemplo que puedo encontrar de usar F_GETPATH es aquí http://www.cocoadev.com/index.pl?DescriptorToPath. ¡Gracias por tu ayuda! –
Impresionante. Gracias :) –