2012-02-05 4 views
6

По словам Apple documentation, в обратный вызов FSEvents,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/

EDIT

Вопрос заключается в том:
Кто-нибудь еще испытал те же результаты?
Это поведение, на которое я могу положиться, чтобы проверить флаги событий файла?

+0

Итак, в чем вопрос? –

+0

oops, добавлен вопрос. спасибо за указание – Tony

+0

Видя то же самое. OS 10.8.2. Это определенно не ведет себя так, как предлагает документация. –

ответ

0

Фактически эти флаги установлены нормально, хотя флаг выглядит неправильно.

Например, у вас есть флаг 133120. Это 0x20800. Итак, вы должны заметить «kFSEventStreamEventFlagItemRenamed = 0x00000800» и «kFSEventStreamEventFlagItemIsDir = 0x00020000».

То есть, kFSEventStreamEventFlagItemRenamed & kFSEventStreamEventFlagItemIsDir - это то, что вы хотите.