AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Thema durchsuchen
Ansicht
Themen-Optionen

FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

Ein Thema von Rollo62 · begonnen am 7. Nov 2017 · letzter Beitrag vom 8. Nov 2017
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.170 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
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 8. Nov 2017, 08:14
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.
Im ersten Link heißt es:
"To retrieve information about the specific change as part of the notification, use the ReadDirectoryChangesW function. This function also enables you to provide a completion routine."
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 8. Nov 2017, 08:16
Vielleicht kannst du ja hiermit was anfangen. Genutzt wird ReadDirectoryChangesW.
https://github.com/HeidiSQL/HeidiSQL...ctoryWatch.pas
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.170 Beiträge
 
Delphi 12 Athens
 
#4

AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 8. Nov 2017, 09:30
Hallo Glados,

vielen Dank für den Link, Heidi ist ja komplett mit Overlapped und Wait.
Das sollte helfen das Blockieren zu verhindern.

@TiGü
Danke auch, ich denke die Funktionen hängen Alle irgendwie zusammen.
Ich brauche aber nichts erweitertes (zumindest im Moment), und ich weiss das der FirstChange.. schon ausreicht.

Die Frage bleibt was ist denn jetzt der beste und effizienteste Weg ?
(die Qual der Wahl).

Ich denke ich probier jetzt auch noch die Heidi-Lösung von Glados aus, und melde mich was damit passiert ...

Rollo
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#5

AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 8. Nov 2017, 09:41
Zitat:
Ich denke ich probier jetzt auch noch die Heidi-Lösung von Glados aus, und melde mich was damit passiert ...
Man braucht nur diese eine Unit zum Glück.

Geändert von Glados ( 8. Nov 2017 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.170 Beiträge
 
Delphi 12 Athens
 
#6

AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister

  Alt 8. Nov 2017, 10:20
Hallo Glados,

ja das funktionier super.
Im Gegensatz zu den anderen Lösungen bekomme ich auch alle Verschiebe-Operationen etc. mit.
Ok, brauche ich eigentlich nicht, aber wenn schon dann schon.

Die Unit ist wohl Teil der CromisLibrary von Iztok Kacin, aber die Site www.cromis.net scheint leider nicht mehr zu existieren.

Zum Glück hatte ich noch eine komplette Library, da muss ich dann nochmal näher reinschauen.

Danke nochmal für den Tipp.

Rollo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz