Was ist der optimale Weg, um Änderungen in einem Verzeichnis mit einem kqueue () zu überwachen?
-
24-10-2019 - |
Frage
OK: Ich implementiere die Dateifreigabe in einer iPhone -Betriebssystem -App, und dies bedeutet natürlich die Überwachung des Dateisystems. Yay!
Grundsätzlich kopiert und/oder löscht sich das Betriebssystem von und in ein Verzeichnis, auf das ich zugreifen kann, wenn der Benutzer Dateien in den Abschnitt meiner App in iTunes verwandelt. Daher muss ich das Verzeichnis auf Änderungen überwachen, die vermutlich über einen effizienten Mechanismus wie a kqueue()
.
Wie kann ich das implementieren, damit ich weiß, dass die Dateien das Kopieren beendet haben? Ich dachte nach: nach:
- Überwachen mit
kqueue()
. - Starten Sie bei der Veranstaltung eine Zeitüberschreitung (oder setzen Sie vorhanden).
- Wenn die Zeitüberschreitung verstrichen, arbeiten Sie.
Aber gibt es eine bessere Möglichkeit, dies zu tun, um sicherzustellen, dass ich nicht über die Zehen des Betriebssystems tritt?
Lösung
Dies ist nur eine teilweise Antwort, könnte aber etwas nützlich sein.
Der Kqueue -Mechanismus funktioniert tatsächlich als Mittel, um benachrichtigt zu werden, wenn das Dokumentenverzeichnis einer App geändert wird.
Die Benachrichtigung erfolgt, sobald das Verzeichnis geändert wird und vor dem Kopieren einer Datei abgeschlossen ist. Ich habe dies beim Testen beobachtet.
Leider gibt es keine Form der Benachrichtigung, wenn die Kopie fertiggestellt wird. Zumindest keine, die ich gefunden habe.
Was ich hoffe, dass Apple erkennen wird, dass es eine Benachrichtigung für "iTunes synchron" geben muss, wird erledigt, da dies ein allgemeines Problem zu geben scheint.
Eine Schleifenprüfung, wenn sich die Änderungszeit der neuen Datei nicht ändert, könnte sich möglicherweise nur meiste Zeit ändern. In einigen extremen Umständen kann iOS innehalten, um alle möglichen zeitaufwändigen Arbeiten im Hintergrund zu erledigen.
Wenn es eine Möglichkeit gibt, zu überprüfen, ob eine bestimmte Datei durch einen anderen Prozess geöffnet ist, würde dies ausreichen.
Geoff