Frage

Ich habe einen einfachen Dateisystem-Watcher in C++ mit der Mac File System Events API erstellt, wie hier dokumentiert: Apple-Entwicklerdokument.Meine Frage steht im Titel.Wie erhalte ich den Pfad der geänderten Sache?Das eventPaths-Array gibt mir nur den Pfad des übergeordneten Verzeichnisses (oder eines Satzes davon) an, das ich im Wesentlichen beobachte.Aber nicht der zugrunde liegende Verzeichniseintrag, der geändert wurde.

Mithilfe des Rückrufs kann ich nützliche Informationen abrufen, z. B.:

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

Ich denke, dass der Name vielleicht aus einem dieser Elemente abgeleitet werden kann?

BEARBEITEN:

Beispielsweise könnte man feststellen, dass eine Datei erstellt wird. In diesem Fall a

kFSEventStreamEventFlagItemCreated

wird angehoben.Aber wie soll ich vorgehen, um den tatsächlichen Namen dieses Artikels herauszufinden?(Das Gleiche gilt für andere Ereignisse, etwa wenn ein Element gelöscht wird usw.).

EDIT 2:

Ich fange an zu glauben, dass es nicht möglich sein wird, das zu tun, was ich will.Aus FS-Tech-Übersicht:

„Der wichtige Punkt ist, dass die Granularität der Benachrichtigungen auf Verzeichnisebene liegt.Es sagt Ihnen nur, dass sich etwas im Verzeichnis geändert hat, sagt Ihnen aber nicht, was sich geändert hat.

Aka.Mistkerl.

Prost,

Ben.

War es hilfreich?

Lösung

Eigentlich ist das möglich, aber erst ab 10.7.Sehen Sie sich das kFSEventStreamCreateFlagFileEvents-Flag für FSEventStreamCreate an (docs Hier).

Andere Tipps

Wie ich herausgefunden habe, ist das leider nicht möglich;sehen FS-Tech-Übersicht für eine Erklärung/Motivation.Eine Lösung wäre, einen Snapshot des Verzeichnisses zu erstellen und dann, wann immer eine Änderung festgestellt wird, einen neuen Snapshot zu erstellen und ihn mit dem Original zu vergleichen, um die spezifischen Verzeichniseinträge (und deren Namen) zu finden, die sich geändert haben.

BEARBEITEN:Es ist in >=10,7 möglich (siehe ausgewählte Antwort)

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