Dateiüberwachung mit Grand Central Dispatch

8

Ich benutze das Codebeispiel von David Hamrick um eine Datei mit GCD zu überwachen.

%Vor%

Ich möchte verwenden, um eine Änderung eines Plist zu überwachen. Ich bekomme eine Benachrichtigung nach der ersten Änderung, aber nicht für die folgenden Änderungen. Warum?

    
Matthieu Riegler 06.07.2012, 02:38
quelle

2 Antworten

11

Sie können die Datei tatsächlich erneut öffnen und eine Quelle erneut registrieren (die vorherige löscht), wenn DISPATCH_VNODE_DELETE empfangen wird. Oder Sie können einen Aufruf verwenden, der nur für diese Art von Szenario entwickelt wurde, nämlich dispatch_io_create_with_path () - das nicht nur nach Pfad sucht, sondern die Datei für Sie öffnet und Sie den Inhalt asynchron lesen lässt.

Da Sie gefragt haben (nicht sicher, nach welcher Technik Sie gefragt haben, aber hier ist die einfachste), ist hier ein eigenständiges Codebeispiel:

%Vor%     
jkh 07.07.2012, 05:13
quelle
1

Nach ein bisschen Recherche Ich habe herausgefunden:

= & gt; Ich erhielt das Flag DISPATCH_VNODE_DELETE

Ich habe ~/Library/Preferences/com.apple.dock.plist überwacht. Nachdem ich herausgefunden habe, dass die Ausrichtung des Docks geändert wird, lösche ich die ursprüngliche Datei und ersetze sie durch eine neue.

Daher wurde die Überwachung gestoppt.

Derselbe Autor schlägt vor eine Lösung , bei der sich der GCD-Block im Falle des Löschens selbst anmeldet, um die Überwachung fortzusetzen.

    
Matthieu Riegler 06.07.2012 02:57
quelle