Es gibt viele Beiträge im Internet über die ReadDirectoryChangesW API-Funktion fehlende Dateien, wenn es viele Dateiaktivitäten gibt. Die meisten beschuldigen die Geschwindigkeit, mit der die ReadDirectoryChangesW-Funktionsschleife aufgerufen wird. Dies ist eine falsche Annahme. Die beste Erklärung, die ich habe in dem folgenden Beitrag gesehen ist, der Kommentar am Montag, 14. April 2008 02.15.27Wie man ReadDirectoryChangesW vor fehlenden Dateiänderungen bewahrt
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/
Die Zusammenfassung ist, dass die ReadDirectoryChangesW Funktion Bericht Änderungen Datei, wie sie das verlassen Datei-Write-Behind-Warteschlange, nicht wie sie hinzugefügt werden. Und wenn zu viele hinzugefügt werden, bevor Sie verpflichtet werden, verlieren Sie die Benachrichtigung über einige von ihnen. Sie können dies mit Ihrer Implementierung sehen, wenn Sie nur ein Programm schreiben, um schnell 1000+ Dateien in einem Verzeichnis zu generieren. Zählen Sie einfach, wie viele Ereignisbenachrichtigungen Sie erhalten, und Sie werden sehen, dass es Zeiten gibt, zu denen Sie nicht alle erhalten.
Die Frage ist, hat jemand eine zuverlässige Methode gefunden, um die Funktion ReadDirectoryChangesW zu verwenden, ohne das Volumen jedes Mal zu leeren? Dies ist nicht zulässig, wenn der Benutzer kein Administrator ist und auch etwas Zeit zum Ausführen benötigt.
Dies würde für etwa 99% der Zeit funktionieren. Was passiert, wenn eine Datei in einem anderen Verzeichnis (außer dem mit vielen Dateiänderungen) übersprungen wird? Sie würden das eine Verzeichnis nach Änderungen durchsuchen, aber die Änderung der einzelnen Datei in einem anderen Verzeichnis verpassen. –
Die FileSystemWatcher-Klasse ist eine .NET-Methode zum Umbrechen von ReadDirectoryChangesW, also nein, das hilft nicht. – Garen
Meine Antwort war mehr über das Erkennen der # von Ereignissen innerhalb eines Zeitraums, um die Problemumgehung für ReadDirectoryChangesW auszulösen. – hova