Pregunta

He creado un simple vigilante de sistemas de archivos en C ++ usando la API de eventos del sistema de archivos MAC tal como se documenta aquí: Apple Developer Doc . Mi pregunta está en el título. ¿Cómo consigo el camino de la cosa que se cambió? La matriz de eventos solo me da la ruta del directorio principal (o se establece) que esencialmente estoy mirando. Pero no la entrada de directorio subyacente que se modificó.

Puedo agarrar información útil usando la devolución de llamada, es decir.:

   static void mycallback(
            ConstFSEventStreamRef streamRef,
            void *clientCallBackInfo,
            size_t numEvents,
            void *eventPaths,
            const FSEventStreamEventFlags eventFlags[],
            const FSEventStreamEventId eventIds[])

¡Estoy pensando que tal vez el nombre se puede extraer de uno de estos artículos?

Editar:

Por ejemplo, se puede encontrar que se crea un archivo en qué caso A

kfseventstreameventflagitemcreated

es elevado. Pero, ¿cómo debo hacer el nombre real de ese artículo? (De manera similar, para otros eventos, como cuando se elimina un artículo, etc.).

Editar 2:

Estoy empezando a pensar que no será posible hacer lo que quiero. Desde FS Tech Descripción general :

"El punto importante para quitar es que la granularidad de las notificaciones está en un nivel de directorio. Solo le dice que algo en el directorio ha cambiado, pero no le dice qué cambió".

aka. Bugger.

vítores,

ben.

¿Fue útil?

Solución

En realidad, esto es posible, pero solo en 10.7+.Echa un vistazo a la bandera de KFSEVENTSTREMCREATEFLAGFILEEVENTES PARA FSEVENTSTREMCREATE (DOCS aquí).

Otros consejos

Desafortunadamente, como descubrí, no es posible;Consulte FS Tech Descripción general para una explicación / motivación.Un trabajo de trabajo sería tomar una instantánea del directorio y luego siempre que se descubra un cambio, tome una nueva instantánea y difúme con el original, para encontrar las entradas específicas del directorio (y sus nombres) que cambiaron.

Editar: es posible en>= 10.7 (ver Respuesta elegida)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top