2012-02-05 29 views
6

Secondo Apple documentation, nel callback per FSEvents,FSEvents bandiere file vengono impostati indipendentemente dal flusso di eventi opzioni di creazione

/* 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 

Tuttavia, tripla controllato che la bandiera kFSEventStreamCreateFlagFileEvents non viene impostata al momento della chiamata

FSEventStreamRef FSEventStreamCreate( 
    CFAllocatorRef allocator, 
    FSEventStreamCallback callback, 
    FSEventStreamContext *context, 
    CFArrayRef pathsToWatch, 
    FSEventStreamEventId sinceWhen, 
    CFTimeInterval latency, 
    FSEventStreamCreateFlags flags); 

Ma non importa quello che faccio, i flag kFSEventStreamEventFlagItem* vengono ancora impostati quando gli eventi vengono passati dall'API FSEvents. Sospetto che sia un bug, ma non ne sono del tutto sicuro. Sto usando OS X Lion 10.7.2

Il codice di esempio può essere trovato qui. http://stuconnolly.com/downloads/scevents/

EDIT

La domanda è:
chiunque altro ha sperimentato gli stessi risultati?
Si tratta di un comportamento su cui posso fare affidamento per controllare i flag di evento del file?

+0

Quindi qual è la domanda? –

+0

oops, aggiunta la domanda. grazie per aver segnalato – Tony

+0

Vedere la stessa cosa. OS 10.8.2 qui. Sicuramente non si sta comportando come suggerisce la documentazione. –

risposta

0

In effetti, questi flag sono impostati normalmente anche se la bandiera sembra sbagliata.

Ad esempio, è presente una bandiera 133120. È 0x20800. Quindi, dovresti notare "kFSEventStreamEventFlagItemRenamed = 0x00000800" e "kFSEventStreamEventFlagItemIsDir = 0x00020000".

Vale a dire, kFSEventStreamEventFlagItemRenamed & kFSEventStreamEventFlagItemIsDir sono ciò che si desidera.