我有一个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 消息“文件夹中的某些活动”)。为什么?我怎样才能只得到一个回调?