Pergunta

Eu quero monitorar os eventos do sistema de arquivos para um par de diretórios no Mac. Os diretórios que deseja monitorar pode mudar em tempo de execução, portanto, usando FSEvents aqui está o meu aplicativo faz:

  • cria uma função de retorno de chamada global para retornos de chamada identificador
  • criar uma nova FSEventStreamRef por pasta, associando-a com o retorno de chamada criado acima e adicionar um contexto ao eventStream que me ajuda a associar o callback mudança com esta pasta

Material parece na maior parte do trabalho, mas tenho notado alguma estranheza quando os retornos de chamada são invocados e os valores dos eventPaths 'sendo enviados para o retorno de chamada.

Por exemplo, se eu criei StreamRefs para / Foo e / Bar, se eu adicionar um arquivo em / Bar meu retorno de chamada é invocado quase imediatamente, mas os eventPaths aponta para um local in / Foo eo contexto I associado com o streamRef é também a de / Foo.

Ou, digamos que eu estou monitorando / Foo e / Bar e remova / Bar (parando e fechando a streamRef para / Bar corretamente). Eu agora criar uma nova FSEventStreamRef para / Fee e associado com o mesmo retorno. Quaisquer alterações que faço para / Fee não causam o retorno de chamada a ser invocado mas muda para / Foo continuam elevando o retorno de chamada.

Qualquer exemplo ou documentação que eu vi on-line fala de monitorar uma única pasta. É algo preso com como eu estou associando os retornos individuais com múltiplas FSEventStreamRefs? Parece que isso não deve ser um problema embora ...

Alguém já fez algo semelhante de uma forma que funciona de forma confiável, ou alguma sugestão para o que eu poderia tentar diferente?

Uma coisa que eu fiz tentativa de fazer o que eu estava experimentando com isso é usar um único FSEventStreamRef e passá-lo um CFArrayRef com todos os caminhos que eu queria, e quando a minha lista de observação muda perto e re-criar uma nova FSEventStreamRef - funciona este ainda pior que a anterior.

Foi útil?

Solução

funciona para mim I emulado estas características:.

  1. Um caminho por fluxo
  2. Um contexto per caminho / fluxo
  3. Uma chamada de retorno para todos os fluxos

Você pode mostrar o código que está falhando?

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