È possibile ottenere il nome file da un ID FSEVENT?
Domanda
Ho creato un semplice watcher di filesystem in C ++ utilizzando l'API degli eventi del file system Mac come documentato qui: Developer Apple DOC . La mia domanda è nel titolo. Come posso ottenere il percorso della cosa che è stato cambiato? L'array di eventpaths mi dà solo il percorso della directory principale (o ne stabilita) che sto essenzialmente guardando. Ma non la voce di directory sottostante che è stata modificata.
Posso afferrare informazioni utili usando il callback, I.e.:
static void mycallback(
ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
.
Sto pensando che forse il nome può essere estratto da uno di questi articoli?
Modifica:
Ad esempio, si potrebbe scoprire che un file è stato creato nel qual caso A
kfseventstreamventflagitemcreated
è sollevato. Ma come dovrei andare a prendere il nome effettivo di quell'oggetto? (Allo stesso modo per altri eventi, come quando un oggetto viene cancellato ecc.).
Modifica 2:
Sto iniziando a pensare che non sarà possibile fare ciò che voglio. Da Panoramica della tecnologia FS :
"Il punto importante da portare via è che la granularità delle notifiche è a livello di directory. Ti dice solo che qualcosa nella directory è cambiato, ma non ti dice cosa è cambiato."
aka. Bugger.
Saluti,
Ben.
Soluzione
In realtà, questo è possibile, ma solo su 10.7+.Dai un'occhiata alla bandiera KFSeventstreamCreateFlagFilevents per FseventsTreamCreate (Docs qui).
Altri suggerimenti
Sfortunatamente come ho scoperto, non è possibile;Vedi Panoramica dei FS Tech per una spiegazione / motivazione.Un'operare sarebbe quella di scattare un'istantanea della directory e quindi ogni volta che viene scoperta una modifica, scattare una nuova istantanea e differ, con l'originale, per trovare le voci specifiche della directory (e i loro nomi) che sono cambiati.
Modifica: è possibile in>= 10.7 (vedi risposta scelta)