如何避免在 FSEventStream 回调中接收旧事件(macOS 上的 FSEvents 框架)

vos*_*osc 5 macos fsevents

我在使用 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参数,但这也没有帮助。

谢谢!