1

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

4

0 回答 0