誰かがこのコードが機能していないことを教えてもらえますか? iOS 6.0 でアプリケーション ドキュメント ディレクトリを監視している間、常にDISPATH_VNODE_WRITEを返します。(iPad) 以下は私のコードです。ファイルが削除されたり、名前が変更されたり、追加されたりしても、常に0x2を返します:(。これは、監視しているディレクトリであるためですか?ファイルではありません!!!ディレクトリが通知を送信した原因を突き止める方法はありますか? ?
int directoryFileDescripter = open([documentDirectory UTF8String], O_EVTONLY);
if (directoryFileDescripter < 0) {
NSLog(@"Couldn't obtain file descripter from the system.");
return;
}
dispatch_queue_t mainQueue = /*dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);*/dispatch_get_main_queue();
if (mainQueue == NULL) {
NSLog(@"Couldn't obtain mainQueue from the system.");
close(directoryFileDescripter);
return;
}
dispSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, directoryFileDescripter, DISPATCH_VNODE_WRITE | DISPATCH_VNODE_DELETE | DISPATCH_VNODE_RENAME, mainQueue);
if (dispSource == NULL) {
NSLog(@"Couldn't obtain dispatch source for directory from the system.");
close(directoryFileDescripter);
return;
}
dispatch_source_set_event_handler(dispSource, ^{
NSLog(@"directory notification received.");
int fileDes = dispatch_source_get_handle(dispSource);
unsigned long mask = dispatch_source_get_data(dispSource);
char path[PATH_MAX] = {0};
int nRes = fcntl(fileDes, F_GETPATH, &path);
if (nRes < 0) {
return;
}
if (mask & DISPATCH_VNODE_WRITE) {
NSLog(@"A file has been written.");
}
if (mask & DISPATCH_VNODE_DELETE) {
NSLog(@"A file has been deleted.");
}
if (mask & DISPATCH_VNODE_RENAME) {
NSLog(@"A file has been renamed.");
}
});
dispatch_source_set_cancel_handler(dispSource, ^{
close(directoryFileDescripter);
});
dispatch_resume(dispSource);