Frage

Ich verwende ReadDirectoryChangesW einen Ordner auszuspionieren, wenn ich eine große Datei in den Ordner zu kopieren bin, kann ich mehrere FILE_ACTION_MODIFIED Nachrichten empfangen, so scheint es, jedes Zeitfenster einen großen Teil der Datei schreibt, können Sie die Datei erhalten geändert Benachrichtigung für jede Zeit. Ich habe versucht, Createfile API zu überprüfen, ob die Datei von AP oder nicht, öffnen kann zu verwenden, aber irgendwann werden einige Dateien immer von anderen AP gesperrt, zum Beispiel, wenn Sie das Outlook öffnen, wird die PST aktualisieren, aber meine AP ‚t darauf zugreifen, müssen wir Shadow Copy beginnen, es zu öffnen. Also meine Frage ist, wie eine Datei wissen ist abgeschlossen Kopieren?

War es hilfreich?

Lösung

Dies ist eine Lösung einer sehr hacky Natur, aber in einer sehr haarigen Situation können Sie eine Abfrageschleife ausführen, um die Größe (oder Änderungsdatum) der Datei zu überprüfen. Wenn es nicht für eine Weile ändern, können Sie etwas mit Sicherheit davon ausgehen, dass die Datei Kopiervorgang abgeschlossen ist.

EDIT: Dies ist nicht die optimale Lösung im durchschnittlichen Fall, aber bedenken Sie, dass im Fall der OP bessere Lösungen werden durch die Problem Einschränkungen ausgeschlossen. Denken Sie darüber nach, bevor Sie von downvoting denken.

Andere Tipps

Wenn Sie die Größe der Datei abzufragen, verwenden Sie nicht _stat/_stat64. Stattdessen öffnen Sie die Datei jedes Mal, wenn Sie benötigen und _filelengthi64 rufen Sie die Größe der Datei zu erhalten. Die Dateigröße, die von _stat64 zurückgegeben wird, nicht in Echtzeit durch das Windows-Betriebssystem aktualisiert. Auch durch die Möglichkeit, die Datei zu öffnen, die Sie testen, um zu sehen, dass alle langen Kopiervorgänge abgeschlossen sind.

Windows bietet eine API-Verzeichnis Content-Update zu überwachen. Sie können das Erstellt Ereignis verwenden, um neue Datei zu erkennen, aber bewusst sein, dass dieses Ereignis Zündmittel nicht zwangsläufig, dass die Datei noch freigegeben wird.

native C ++ Spezifikationen und Code-Beispiel:

http://msdn.microsoft.com/ en-us / library / aa365261 (VS.85) aspx

.net:

http://msdn.microsoft.com/en- us / library / system.io.filesystemwatcher.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top