Frage

Ich möchte für ein paar Verzeichnisse auf dem Mac-Datei-System-Ereignisse überwachen. Die Verzeichnisse ich zur Laufzeit kann sich ändern, überwachen möchten, so verwenden FSEvents hier ist, was meine app tut:

  • erstellt eine globale Callback-Funktion zu behandeln Rückrufe
  • einen neuen FSEventStreamRef pro Ordner erstellen, mit dem oben erstellten Rückruf assoziieren und einen Kontext zu dem Eventstream hinzufügen, die ich die Änderung Rückruf mit diesem Ordner verbinden hilft

Stuff scheint meistens zu arbeiten, aber ich habe einige Seltsamkeit in, wenn die Rückrufe bemerkt werden aufgerufen, und die Werte werden an die Callback ‚eventPaths‘ gesendet.

Zum Beispiel, wenn ich StreamRefs erstellt habe für / Foo und / Bar, wenn ich eine Datei hinzufügen in / Bar mein Rückruf fast sofort aufgerufen wird, aber die eventPaths zeigt auf eine Stelle in / Foo, und der Kontext I im Zusammenhang mit die streamRef ist auch, dass die / Foo.

Oder sagen, ich bin Überwachung / Foo und / Bar und entfernen / Bar (durch Anhalten und Schließen des streamRef für / Bar korrekt). Ich erstelle eine neue FSEventStreamRef für / Fee und assoziiert mit dem gleichen Rückruf. Alle Änderungen, ich / Preis machen nicht bewirken, dass der Rückruf aufgerufen werden, aber Änderungen / Foo weiterhin den Rückruf zu erhöhen.

Jedes Beispiel oder Dokumentation Ich habe einen einzelnen Ordner zu überwachen online nur Gespräche gesehen. etwas kaputt mit, wie ich die einzelnen Rückrufe mit mehreren FSEventStreamRefs assoziieren? Es klingt wie das sollte jedoch kein Problem sein ...

Hat jemand getan etwas ähnliches in einer Weise, die zuverlässig, oder Vorschläge für das, was funktioniert, ich könnte versuchen, anders?

Eine Sache, die ich versucht habe zu tun, wie ich mit diesem experimentierte ist eine einzige FSEventStreamRef verwenden und geben es eine CFArrayRef mit allen Pfaden ich wollte, und wenn meine Uhr Liste schließen verändert und neu erstellen eine neue FSEventStreamRef - das funktioniert noch schlimmer, dass die oben genannten.

War es hilfreich?

Lösung

.

für mich funktioniert ich emuliert diese Eigenschaften:

  1. Ein Pfad pro Stream
  2. Ein Kontext pro Pfad / Strom
  3. Ein Rückruf für alle Ströme

Kann zeigen Sie den Code, der Fehler ist?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top