我有一个FSEvents
信息流,我观察了一个文件夹。当我将一些文件添加到该文件夹时,回调函数会触发该文件。但是,我认为我可以使用FSEventStreamEventFlags
常量检查特定事件,例如将文件添加到我的文件夹,或检查文件是否已修改,但我不能。我只能在完成历史的情况下做到这一点:
void fileSystemEventCallback(ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
char **paths = eventPaths;
int i;
for (i = 0; i < numEvents; i++) {
if (eventFlags[i]==kFSEventStreamEventFlagHistoryDone) {
NSLog(@"history Done");
}
}
我检查所有其他FSEventStreamEventFlags
常量,并且没有常量会触发将文件添加到我的文件夹或修改文件或删除。我现在使用这种结构:
void fileSystemEventCallback(ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
char **paths = eventPaths;
int i;
for (i = 0; i < numEvents; i++) {
if (eventFlags[i]==kFSEventStreamEventFlagHistoryDone) {
NSLog(@"history Done");
}
else{
NSLog(@"some activity in a folder");
}
}
但是当我使用这种结构时,我得到一个多回调(即我有一个多个NSLog消息“文件夹中的某些活动”),当我添加文件或其他东西时。为什么?如何才能获得一次回调?