Ich beobachte Verzeichnisse und Plattenänderungen in einem Cocoa-Projekt mit FSEvents
. Ich muss Ereignisse erhalten, wenn ein Stammordner umbenannt oder gelöscht wird. Also habe ich kFSEventStreamCreateFlagWatchRoot
übergeben, während ich FSEventStream
erstellt habe. Aber selbst wenn ich den Stammordner lösche oder umbenenne, bekomme ich nicht den entsprechenden FSEventStreamEventFlags
. Irgendeine Idee, was möglicherweise das Problem sein könnte. Ich höre auf Änderungen in einem USB-Gerät. Ich habe sowohl FSEventStreamCreate
als auch FSEventStreamCreateRelativeToDevice
benutzt. Eine Sache, die ich merke ist, wenn ich versuche mit FSEventStreamCreate
Ich bekomme die folgende Fehlermeldung beim Erstellen von FSEventStream
:
(
CarbonCore.framework
)FSEventStreamCreate
:watch_all_parents
:
Fehler beim Hinzufügen von kqueue fürfd 7
(/Volumes/NO NAME
; Operation nicht unterstützt)
Aber mit FSEventStreamCreateRelativeToDevice
gibt es keine Fehler, aber immer noch nicht kFSEventStreamEventFlagRootChanged
in Event Flags. Während der Erstellung mit FSEventStreamCreateRelativeToDevice
apple say's, wenn ich auf Änderungen des Root-Pfades hören möchte, übergeben Sie die emty-Zeichenfolge ""
. Aber ich bin nicht in der Lage, Änderungen des Stammpfads zu hören, indem ich leere Strings übergebe. Aber wenn ich "/"
passiere, funktioniert es. Aber selbst für "/"
bekomme ich kein richtiges FSEventStreamEventFlags
. Ich füge den Code hier ein:
Rückruffunktion:
%Vor%Vielen Dank im Voraus.
Ich hatte das gleiche Problem und ich denke, ich habe es herausgefunden. Anscheinend kFSEventStreamCreateFlagWatchRoot
wird einfach nur bei Verwendung von FSEventStreamCreateRelativeToDevice
gesprengt. Sie müssen FSEventStreamCreate
verwenden. Da das vorherige Formular vorzuziehen ist, wenn Sie sich auf historische Ereignis-IDs verlassen, müssen Sie möglicherweise zwei Streams erstellen. Beachten Sie außerdem, dass Sie anscheinend nicht kEventFlagChangedRoot
an Sie gesendet haben, wenn Ihre App nicht ausgeführt wird. Daher müssen Sie das Verzeichnis beim Starten stattern.
Ich denke, die Änderung des Datenträgernamens wird nicht als Änderung des von FSEvents gemeldeten Dateisystems gezählt. Denken Sie daran, der Name des Datenträgers selbst existiert nicht wirklich als Dateisystemeintrag. Die unter /Volumes
wird vom Betriebssystem bereitgestellt.
Sie wird stattdessen von Disk Arbitration abgedeckt.
Es folgt ein kurzer Beispielcode. Definieren Sie zuerst den Rückruf
%Vor%und dann den Handler wie folgt installieren
%Vor%