Pergunta

Criei um observador de sistema de arquivos simples em C++ usando a API Mac File System Events conforme documentado aqui: documento de desenvolvedor da Apple.Minha pergunta está no título.Como obtenho o caminho da coisa que foi alterada?A matriz eventPaths me fornece apenas o caminho do diretório pai (ou conjunto dele) que estou essencialmente observando.Mas não a entrada do diretório subjacente que foi modificada.

Posso obter informações úteis usando o retorno de chamada, ou seja:

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

Estou pensando que talvez o nome possa ser extraído de um desses itens?

EDITAR:

Por exemplo, pode-se descobrir que um arquivo é criado e, nesse caso, um

kFSEventStreamEventFlagItemCreated

é levantado.Mas como devo proceder para obter o nome real desse item?(Da mesma forma para outros eventos, como quando um item é excluído, etc.).

EDITAR 2:

Estou começando a pensar que não será possível fazer o que quero.De Visão geral da tecnologia FS:

"O ponto importante a ser retirado é que a granularidade das notificações está no nível do diretório.Ele informa apenas que algo no diretório foi alterado, mas não informa o que mudou."

Também conhecido como.Droga.

Saúde,

Ben.

Foi útil?

Solução

Na verdade, isso é possível, mas apenas em 10.7+.Confira o sinalizador kFSEventStreamCreateFlagFileEvents para FSEventStreamCreate (docs aqui).

Outras dicas

Infelizmente, como descobri, não é possível;ver Visão geral da tecnologia FS para uma explicação/motivação.Uma solução alternativa seria tirar um instantâneo do diretório e, sempre que uma alteração for descoberta, tirar um novo instantâneo e compará-lo com o original, para encontrar as entradas específicas do diretório (e seus nomes) que foram alteradas.

EDITAR:É possível em >=10,7 (ver resposta escolhida)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top