![]() |
FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Hallo zusammen,
ich habe schonmal ![]() Funktionierte ganz OK. (Also neue Files melden, Löschen melden, umbenennen, o.ä. melden ohne Polling). ![]() 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 ![]() ![]() 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 ![]() 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 ![]() 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 ![]() 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 |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Zitat:
"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." |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Vielleicht kannst du ja hiermit was anfangen. Genutzt wird ReadDirectoryChangesW.
![]() |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
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 |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Zitat:
|
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
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 ![]() Zum Glück hatte ich noch eine komplette Library, da muss ich dann nochmal näher reinschauen. Danke nochmal für den Tipp. Rollo |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Ich merke gerade, dass meine Unit der DirectoryWatch um einiges anders aussieht als die Version bei Github.
Da ich meine Unit erst seit 2012 nutze denke ich, dass sie neuer ist. Wo auch immer ich die gefunden habe. Beispielsweise lautet in Execute eine Zeile bei mir
Delphi-Quellcode:
procedure TDirWatchThread.Execute;
... if ReadDirectoryChangesW(FDirHandle, FIOResult, IO_BUFFER_LEN, FWatchSubTree, FFilter, @ResSize, @Overlap, nil) then begin WaitResult := WaitForMultipleObjects(2, @Events[0], False, INFINITE); Bei Github
Delphi-Quellcode:
BeyondCompare zeigt mir 61 unterschiedliche Abschnitte.
procedure TDirWatchThread.Execute;
... if ReadDirectoryChangesW(FDirHandle, FIOResult, FBufferSize, FWatchSubtree, FFilter, @ResSize, @Overlap, nil) then begin WaitResult := WaitForMultipleObjects(Length(Events), @Events, FALSE, INFINITE); |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Ich habe die 2te Variante, Änderungsdaten von 2011 bis 2014.
Copyright ist von 2009, scheint überall gleich zu sein. Ich weiss leider nicht mehr wo ich das herhabe. Rollo |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Könntest du mir diese Unit zum Vergleich zur Verfügung stellen?
Meine Unit scheint dann doch älter zu sein. Eine neuere finde ich nicht. Meine ist außerdem von mir um ein paar Properties erweitert worden (eine wichtige Funktionalität mehr). |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Hallo Glados,
ein Problem hatte die Unit aber, wenn man das Base directory selbst entfernt läuft der Thread wild. Das kann man aber leicht beheben:
Delphi-Quellcode:
Ich kann dir die Unit zuschicken.
begin
ErrorMessage := SysErrorMessage(GetLastError); SignalError(ErrorMessage); Terminate; //S4: Added 08.11.17: Prevent endless loop when removing base directory Exit; end; end; end else begin ErrorMessage := SysErrorMessage(GetLastError); SignalError(ErrorMessage); end; Rollo |
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Zitat:
Zitat:
|
AW: FindFirstChangeNotifikation vs. ReadDirectoryChangesW vs. SHChangNoitifyRegister
Zitat:
Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 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