7 Stimmen

Wie implementiert man die Rollback-Funktion?

Ich möchte eine C# Anwendung erstellen, in der einige Dateien in zwei verschiedenen Ordnern kopiert werden (die bereits ältere Versionen der Dateien enthalten) und auch SQL-Skripte ausgeführt werden. Während des gesamten Prozesses, falls eine Ausnahme auftritt, müssen alle Änderungen rückgängig gemacht werden.

Für SQL-Skripte kann eine Transaktion verwendet werden, aber wie kann der Dateikopierprozess mit Rollback implementiert werden?

3voto

idursun Punkte 6170

Sie können von Transactional NTFS profitieren, wenn möglich. Andernfalls können Sie eine Liste der Operationen führen, die Sie durchgeführt haben, und das Gegenteil davon tun, wenn ein Rollback erforderlich ist.

3voto

Oder Sie können sich als Softwareentwickler weiterentwickeln und das Command Pattern verwenden und einen BatchCommand implementieren. Befehle erleichtern das Hinzufügen von Rückgängig-Funktionalität und die kapseln sie intelligent. Ein BatchCommand kann dann undo() für jeden Befehl in seiner Liste aufrufen.

Für einen guten Einstieg in Muster, schauen Sie sich Head First Design Patterns an.

2voto

Wael Dalloul Punkte 21012

Sie können eine Kopie der alten Datei erstellen, bevor Sie sie ersetzen, und dann im Falle einer Ausnahme von dieser Kopie wiederherstellen.

0voto

Benjamin Cox Punkte 5990

Würde es Ihrem Anwendungsfall entsprechen, die Dateien in ein temporäres Verzeichnis zu kopieren und dann das gesamte Verzeichnis an die entsprechende Stelle zu verschieben? In diesem Fall ist ein Rollback so einfach wie das Löschen des temporären Verzeichnisses.

0voto

Ich würde die neuen Dateien kopieren und dabei einen Suffix und eine Zufallszahl anhängen, um Zusammenstöße mit bereits vorhandenen Dateinamen zu vermeiden.

Beispiel... Alte Datei="myfile.txt", Neue Datei="myfile.txt.new.285387".

Dann, wenn der Kopiervorgang erfolgreich abgeschlossen ist, würde ich... -Die alte Datei umbenennen in "myfile.txt.old.3464353". -Die neue Datei umbenennen in "myfile.txt" -Schließlich wird die alte Datei gelöscht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X