0
有人可以告訴我這段代碼不工作嗎?在監視iOS 6.0中的應用程序文檔目錄時,它始終返回DISPATH_VNODE_WRITE。 (iPad)下面是我的代碼。它總是返回0x2,無論文件被刪除或重命名或添加:(這是因爲它是我監測的目錄?不是文件!!!有什麼方法可以找出導致目錄發送通知的原因?dispatch_source_get_data在監視目錄時不返回正確的標誌
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);
謝謝。我以爲是這樣...我只需要跟蹤所有的文件夾內容:( – CodeWeed