我在使用 macOS 框架 FSEvents 时遇到问题:当我调用FSEventStreamCreate并传递kFSEventStreamEventIdSinceNow“since”参数时,我仍然会收到kFSEventStreamEventFlagItemCreated在创建和计划流之前几秒钟已生成的文件的事件。
NSArray* paths = createDummyFilesOnFileSystem();
sleepForFiveSeconds();
CFRunLoopRef runLoop = ...;
FSEventStreamContext context = ...;
CFTimeInterval latency = 0.5;
FSEventStreamCreateFlags streamCreateFlags =
kFSEventStreamCreateFlagUseCFTypes |
kFSEventStreamCreateFlagNoDefer |
kFSEventStreamCreateFlagWatchRoot |
kFSEventStreamCreateFlagFileEvents;
FSEventStreamRef stream = FSEventStreamCreate(NULL,
&fsEventCallback,
&context,
(__bridge CFArrayRef) paths,
kFSEventStreamEventIdSinceNow,
latency,
streamCreateFlags);
FSEventStreamScheduleWithRunLoop(stream, runLoop, kCFRunLoopDefaultMode);
FSEventStreamStart(stream);
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来避免收到kFSEventStreamEventFlagItemCreated 之前创建的那些文件的通知,或者我可以通过任何方式过滤掉这些文件(例如通过查看其他标志)?我已经尝试最初刷新流并传递FSEventsGetCurrentEventId()since参数,但这也没有帮助。
谢谢!