2010-02-08 6 views
11

Ich baue eine Server-App, die Dateien mit System.IO.File.Copy (...) -Funktion kopiert. Meine Dateien können ziemlich groß sein, daher besteht eine gute Chance, dass es beim Kopieren zum Absturz kommt.Atomic File Copy unter .NET

Nach dem Neustart des Dienstes sollte ich in der Lage sein, die Kopieraufgaben aufzunehmen und fortzufahren. Wie kann ich feststellen, ob eine Kopie erfolgreich abgeschlossen wurde oder durch einen Serverabsturz unterbrochen wurde?

Mein aktueller Plan besteht darin, die Dateien in einen temporären Namen zu kopieren und nach dem Kopieren den endgültigen Namen umzubenennen. Auf diese Weise kann die Dateibenennung die Statusinformationen über den Absturz hinweg tragen.

Haben Sie gute/bessere Vorschläge?

EDIT: Ziel-OS ist Win2003, also Transaktions NTFS nicht verfügbar ist

+0

Siehe auch: http://stackoverflow.com/questions/15274861/file-move-atomic -Betrieb –

Antwort

10

Andere haben Transaktions-NTFS empfohlen, was in Ordnung ist, wenn Sie unter Vista oder später bereitstellen. Wenn Sie XP (oder früher) unterstützen müssen, dann ist eine temporäre Datei gefolgt von einem Umzug (Umbenennen) die beste Lösung.

Die Antwort auf diese ähnliche Frage stellt weitere Informationen: Atomicity of File.Move