Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#1

FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 7. Nov 2017, 20:25
Hallo zusammen,

ich habe schonmal FindFirstChangeNotifikation mit C++ für das Überwachen von Directories und Files eingesetzt.
Funktionierte ganz OK.
(Also neue Files melden, Löschen melden, umbenennen, o.ä. melden ohne Polling).
http://www.delphipraxis.net/152046-f...anstossen.html

Jetzt bräuchte ich das wieder, und ich checke gerade was es da so Alles gibt.
Dafür gibt es auch eine Lösung mit ReadDirectoryChangesW.
http://forum.codecall.net/topic/7631...r-for-changes/

Welches ist denn "moderner" oder was für Vor- Nachteile gibt es da zwischen den Beiden ?
Die scheinen erstmal ziemlich das Gleiche zu machen.

Mit FindFirstChangeNotifikation war ich ganz zufrieden seinerzeit, auch weil es mit einem WaitForMultipleObjects effizient arbeiten kann.

Das ReadDirectoryChangesW habe ich jetzt nur kurz gecheckt, läuft auch, aber da fehlt offenbar ein Wait im Thread.
Das ReadDirectoryChangesW scheint selbst blockend zu sein, und in der Funktion ein Wait zu setzen.
Beim Beenden des Demos gibt es dann MemoryLeaks.

Wie kann man das ReadDirectoryChangesW abbrechen, um den Thread sauber zu Beenden, ein Timeout scheint es nicht zu geben.

ReadDirectoryChangesW oder FindFirstChangeNotifikation , was sollte man Nutzen ?


Update:
Ok, ich sehe gerade da kann man was über https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx machen kann,
und doch Sync oder Async arbeiten.
Das Demo oben hat anscheinend nur den synchronen Code drin, ohne Overlapping.

Es scheint hier noch eine weitere Möglichkeit zu geben mit SHChangeNotifyRegister.

Die Fragen bleiben:
- Was sind Vor- Nachteile / Unterschiede
- Welche sollte man nehmen für das Überwachen ob Files erzeugt oder gelöscht werden ?
- Welche Version ist am zukunftssichersten ?

Vieleicht hat ja jemand damit schon mehr Erfahrungen damit gemacht ?

Rollo

Geändert von Rollo62 ( 8. Nov 2017 um 06:05 Uhr)
  Mit Zitat antworten Zitat