Domanda

Voglio monitorare gli eventi del file system per un paio di directory sul mac. Le directory che voglio monitorare potrebbe cambiare in fase di esecuzione, in modo da utilizzare FSEvents ecco quello che la mia app fa:

  • crea una funzione globale di callback per gestire i callback
  • creare una nuova FSEventStreamRef per cartella, associandolo con la richiamata creato in precedenza e l'aggiunta di un contesto al EVENTSTREAM che mi aiuta associo il cambiamento di callback con questa cartella

Roba sembra funzionare per lo più, ma ho notato alcune stranezze quando i callback vengono richiamati ed i valori 'eventPaths' stato inviato al callback.

Per esempio, se ho creato StreamRefs per / Foo e / Bar, se posso aggiungere un file in / Bar mia callback viene richiamato quasi subito, ma le eventPaths punta a una posizione in / Foo, e il contesto sono associati la StreamRef è anche quello di / Foo.

In alternativa, dire che sono il monitoraggio / Foo e / Bar e quindi rimuovere / Bar (arrestando e chiudendo lo StreamRef per / Bar correttamente). Ora creare un nuovo FSEventStreamRef per / Prezzo e di associarsi con la stessa richiamata. Tutte le modifiche che faccio a / Prezzo non causano il callback da richiamare, ma modifiche / Foo continuare a sollevare la richiamata.

Ogni esempio o la documentazione che ho visto on-line parla solo di monitorare una singola cartella. È qualcosa di rotto con come sto associando i singoli callback con più FSEventStreamRefs? Sembra che non dovrebbe essere un problema, però ...

Qualcuno ha fatto qualcosa di simile in un modo che funziona in modo affidabile, o qualche suggerimento per quello che ho potuto provare in modo diverso?

Una cosa che ho fatto il tentativo di fare come stavo sperimentando con questo è utilizzare un unico FSEventStreamRef e passargli un CFArrayRef con tutti i sentieri che volevo, e quando la mia lista di controllo cambia chiudere e ri-creare un nuovo FSEventStreamRef - questo funziona ancora peggio che quanto sopra.

È stato utile?

Soluzione

.

funziona per me ho emulato queste caratteristiche:

  1. Un percorso per flusso
  2. Un contesto per percorso / flusso
  3. Una callback per tutti i flussi

Si può mostrare il codice che sta fallendo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top