ReadDirectoryChangesW

03/01/2011 - 17:42 von Daniel Weber | Report spam
Hallo zusammen,

ich verwende ReadDirectoryChangesW (mit WaitForSingleObject und
GetOverlappedResult) um in einem Verzeichnisbaum alle Dateiverànderungen
mitzukriegen. Seltsamerweise gehen mir manchmal manche
Dateiverànderungen durch die Lappen.

Kennt jemand von Euch ein àhnliches Phànomen oder hat schonmal selbst
àhnliches gemacht?

MSDN sagt zu lpBuffer, dass der mit dem ersten Aufruf von
ReadDirectoryChangesW alloziert wird und sich spàter nicht mehr àndert.
Wenn der Puffer überlàuft, wird er ausgeleert und lpBytesReturned (was
ich ja per GetOverlappedResult bekomme) sei dann 0. Somit müsste man ja
grundsàtzlich immer irgendwann in diesen Fall laufen. Mein (vielleicht
naiver) Ansatz ist da bisher, dass ich grundsàtzlich mit jedem
ReadDirectoryChangesW-Aufruf einen neuen leeren Buffer bereitstelle,
dann erst den alten verarbeite und wieder freigebe...

Ciao,
Daniel
 

Lesen sie die antworten

#1 Martin Richter [MVP]
04/01/2011 - 12:57 | Warnen spam
Hallo Daniel!

ich verwende ReadDirectoryChangesW (mit WaitForSingleObject und
GetOverlappedResult) um in einem Verzeichnisbaum alle Dateiverànderungen
mitzukriegen. Seltsamerweise gehen mir manchmal manche
Dateiverànderungen durch die Lappen.

Kennt jemand von Euch ein àhnliches Phànomen oder hat schonmal selbst
àhnliches gemacht?



Nein!

MSDN sagt zu lpBuffer, dass der mit dem ersten Aufruf von
ReadDirectoryChangesW alloziert wird und sich spàter nicht mehr àndert.
Wenn der Puffer überlàuft, wird er ausgeleert und lpBytesReturned (was
ich ja per GetOverlappedResult bekomme) sei dann 0. Somit müsste man ja
grundsàtzlich immer irgendwann in diesen Fall laufen.



Nein! Ich verstehe den Text anders. Es wird ein interner Buffer
verwendet (Zitat: "the system allocates a buffer"). Und der wird
verwendet um die Änderungen zwischen zu speichern.
Ich verstehe es so:
Werden also die Daten nicht abgeholt. Dann gehen die Informationen
verloren und Du erhàltst irgendwann eine erfolgreiche Rückgabe aber eben
mit 0 Bytes.

Mein (vielleicht
naiver) Ansatz ist da bisher, dass ich grundsàtzlich mit jedem
ReadDirectoryChangesW-Aufruf einen neuen leeren Buffer bereitstelle,
dann erst den alten verarbeite und wieder freigebe...



Nein! Unnötig und in meinen Augen gerade für Overlapped I/O falsch.
Siehe
http://qualapps.blogspot.com/2010/0...ngesw.html
http://www.codeproject.com/KB/files...tcher.aspx


Ansonsten zeige uns etwas Code.

Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com

Ähnliche fragen