Dateiänderungen überwachen
-
Bei meinen Programmen hat sich einiges an der Skriptbarkeitesfront getan und nun möchte ich zwecks Benutzerfreundlichkeit die Skripte neu laden, wenn sich an ihnen etwas verändert (Das System geht sehr human mit fehlerhaften Skripten um...).
Laut Doku habe ich jetzt die Wahl zwischen ReadDirectoryChanges und FindFirstChangeNotification, wobei ersteres nach Polling ausschaut und man bei letzterem auf Events warten muss.
Gibts da auch eine Lösung, bei der man effektiv keinen Worker-Thread braucht und wo einfach Nachrichten in der Warteschlange landen, wenn sich etwas getan hat?Viele Grüße
-
SHChangeNotifyRegister
Du hast die beiden Methoden gefunden.
Das ist auch kein Polling bei ReadDirectoryChanges. Dort kann man eine Overlapped Struktur angeben!Wie es geht wird in genug Samples gezeigt.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspxSiehe auch:
http://qualapps.blogspot.de/2010/05/understanding-readdirectorychangesw.html
http://qualapps.blogspot.de/2010/05/understanding-readdirectorychangesw_19.html
-
Okay, die Overlapped-Sache hatte ich jetzt so interpretiert, dass es nur darum geht, dass der Aufruf nicht blockiert, während geschaut wird, ob sich etwas verändert hat. Manchmal verstehe ich die MSDN-Dokumentation einfach nicht so gut, oder ich bin der Meinung, dass sie aktiv Information auslässt, die beim Verständnis und beim Herausfinden der Information durchaus von Belang sein könnten. Ich hatte das Overlapped-Dings durchaus gesehen, beim Drüberlesen, aber dort stand nicht offensichtlich, in welcher Form die Asynchronität gemeint wäre.
Bei vielen API-Dokumentationen wäre es auch äußerst hilfreich, wenn schon die Signatur einen Lifetime-Ownership-Transfer von beispielsweise Handles anzeigen würde, statt dass man sich durch 3 Seiten kleingedrucktes wühlen muss.
Aber ansonsten steht da echt viel drin und man findet vieles schnell, ich will hier jetzt nicht flamen.
SHChangeNotifyRegister schaue ich mir an, danke soweit schonmal!
-
Guck mal hier:
http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-allHab ich selber in Verwendung und funktioniert 1a
-
Danke, das schaue ich mir mal näher an, auch wenn ich da jetzt auf Anhieb keine Lizenz entdecken kann... schreibt CodeProject eine vor?
-
Schau mal hier:
http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all?msg=737641#xx737641xx
-
Hallo,
du kannst mit GetFileAttributesEx herausbekommen ob sich etwas verändert hat
PseudoCode! :
//parm change check now if source change if(GetFileAttributesEx(m_LuaPath,GetFileExInfoStandard,(LPVOID *)&m_fdata)) { if(m_lasttimeLua.dwHighDateTime != m_fdata.ftLastWriteTime.dwHighDateTime || m_lasttimeLua.dwLowDateTime != m_fdata.ftLastWriteTime.dwLowDateTime) { m_lasttimeLua.dwHighDateTime = m_fdata.ftLastWriteTime.dwHighDateTime, m_lasttimeLua.dwLowDateTime = m_fdata.ftLastWriteTime.dwLowDateTime; SetEvent(m_PropEvent); return true; } }
-
Was soll diese Nekromantie?