根据Apple documentation,在FSEvents
的回调中,
/* These flags are only set if you specified the FileEvents */
/* flags when creating the stream. */
kFSEventStreamEventFlagItemCreated = 0x00000100,
kFSEventStreamEventFlagItemRemoved = 0x00000200,
kFSEventStreamEventFlagItemInodeMetaMod = 0x00000400,
kFSEventStreamEventFlagItemRenamed = 0x00000800,
kFSEventStreamEventFlagItemModified = 0x00001000,
kFSEventStreamEventFlagItemFinderInfoMod = 0x00002000,
kFSEventStreamEventFlagItemChangeOwner = 0x00004000,
kFSEventStreamEventFlagItemXattrMod = 0x00008000,
kFSEventStreamEventFlagItemIsFile = 0x00010000,
kFSEventStreamEventFlagItemIsDir = 0x00020000,
kFSEventStreamEventFlagItemIsSymlink = 0x00040000
但是,我在调用
时检查了kFSEventStreamCreateFlagFileEvents
标志是否未设置
FSEventStreamRef FSEventStreamCreate(
CFAllocatorRef allocator,
FSEventStreamCallback callback,
FSEventStreamContext *context,
CFArrayRef pathsToWatch,
FSEventStreamEventId sinceWhen,
CFTimeInterval latency,
FSEventStreamCreateFlags flags);
但无论我做什么,当事件从kFSEventStreamEventFlagItem*
API传递给我时,仍然会设置FSEvents
标志。我怀疑这是一个错误,但我不太确定。我正在使用OS X Lion 10.7.2
示例代码可以在这里找到。 http://stuconnolly.com/downloads/scevents/
修改
问题是:
还有其他人经历过相同的结果吗?
这是我可以依赖的行为来检查文件事件标志吗?
答案 0 :(得分:0)
实际上,虽然标志看起来不对,但这些标志设置正常。
例如,你有一个标志133120.That是0x20800。 所以,你应该注意到“kFSEventStreamEventFlagItemRenamed = 0x00000800” 和“kFSEventStreamEventFlagItemIsDir = 0x00020000”。
也就是说,kFSEventStreamEventFlagItemRenamed& kFSEventStreamEventFlagItemIsDir就是你想要的。