Ich möchte ein Verzeichnis (von Tausenden von Dateien, mit etwa 5 Ebenen von Unterverzeichnissen) für, wenn Dateien geändert werden. Ich weiß, dass ich die FSEvents-API verwenden kann, um ein Verzeichnis zu überwachen, wenn sich Dateien innerhalb dieses Verzeichnisses ändern, aber ich kann nicht herausfinden, wie man bestimmt, welche Datei (en) sich geändert hat. This Referenz schlägt vor, ich baue einen Binärbaum und durchquere den Baum jedes Mal, wenn ein Ereignis ausgelöst wird, ist das die beste Weise zu bestimmen, welche Dateien geändert wurden? Wenn nicht, was sind bessere Alternativen?Watch-Verzeichnis für Dateiänderungen
Ist es besser, rekursiv das Verzeichnis zu durchsuchen und kqueue an jede Datei anzuhängen? Ich bin mir nicht sicher, wie gut das bei Tausenden von Dateien funktionieren würde.
Jesse, haben Sie versucht, mit NSFileCoordinator/NSFilePresenter die Überwachung einiger Ordner zu implementieren? Ich konnte diese Lösung nicht funktionieren lassen - sie informiert mich einfach nicht über irgendwelche Ereignisse. –
@DaveNewman NSFileCoordinator funktioniert nur, wenn das Programm, das die Änderungen vornimmt, es auch verwendet. (d. h. es ist eine Opt-In-API) Die meisten Cocoa-Programme werden dies tun; Werden die Änderungen möglicherweise von einer untergeordneten API vorgenommen? –
Ich verstehe es nicht. Zum Beispiel habe ich einen Datei-Presenter für meinen Ordner erstellt, z. B. "/ Users/Dave/MyFolder". Wenn ich jetzt Dateien in dieses Verzeichnis ablege (Drag & Drop), wird nur die Methode 'presentedSubitemDidChangeAtURL:' vom System aufgerufen, aber nicht 'presentedSubitemDidAppearAtURL:'. Es ruft auch nicht "accommodatePresenedSubitemDeletionAtURL" auf, wenn ich einige Dateien im Finder lösche. Habe ich etwas vergessen? –