Файловите флагове на FSEvents се задават независимо от опциите за създаване на поток от събития

Според документация на Apple, в обратното обаждане до 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* все още се задават, когато събитията се предават към мен от FSEvents API. Подозирам, че това е грешка, но не съм съвсем сигурен. Използвам OS X Lion 10.7.2

Примерен код можете да намерите тук. http://stuconnolly.com/downloads/scevents/

РЕДАКТИРАНЕ

Въпросът е:
Някой друг имал ли е същите резултати?
Това поведение ли е, на което мога да разчитам, за да проверя за флаговете за файлови събития?


person Tony    schedule 05.02.2012    source източник
comment
опа, добави въпроса. благодаря, че посочи   -  person Tony    schedule 05.02.2012
comment
Виждайки същото. OS 10.8.2 тук. Определено не се държи така, както предполага документацията.   -  person John Bowers    schedule 27.11.2012
comment
В моя случай тествам както за kFSEventStreamEventFlagItemCreated, така и за kFSEventStreamEventFlagItemIsFile. Когато създам нов файл в наблюдаваната директория, обратното извикване се извиква, но тези флагове не са зададени!!   -  person Nicolas Miari    schedule 09.11.2013


Отговори (1)


Всъщност тези флагове са зададени нормално, въпреки че флагът изглежда грешен.

Например, имате флаг 133120. Това е 0x20800. Така че трябва да забележите „kFSEventStreamEventFlagItemRenamed = 0x00000800“ и „kFSEventStreamEventFlagItemIsDir = 0x00020000“.

С други думи, kFSEventStreamEventFlagItemRenamed & kFSEventStreamEventFlagItemIsDir са това, което искате.

person Kakashi    schedule 11.04.2017