2 つの異なるフォルダー (既に古いバージョンのファイルが含まれています) にいくつかのファイルをコピーし、SQL スクリプトも実行する C# アプリケーションを作成したいと考えています。プロセス全体で例外が発生した場合、すべての変更をロールバックする必要があります。
SQLスクリプトの場合、トランザクションを使用できますが、ロールバックを使用してファイルのコピープロセスを実装するにはどうすればよいですか?
可能であれば、トランザクション NTFSを利用できます。そうでない場合は、実行した操作のリストを保持し、ロールバックが必要なときにその逆を行うことができます。
または、ソフトウェア開発者として進化し、コマンド パターンを使用して BatchCommand を実装することもできます。コマンドを使用すると、元に戻す機能を簡単に追加して、インテリジェントな方法でカプセル化できます。その後、BatchCommand は、そのリスト内の各 Command で undo() を呼び出すことができます。
パターンの入門書として、Head First Design Patternsをチェックしてください。
古いファイルを置き換える前にコピーを作成し、例外が発生した場合は、このコピーから復元できます。
ファイルを一時ディレクトリにコピーしてから、ディレクトリ全体を所定の場所に移動するのは、ユース ケースに適していますか? その場合、ロールバックは一時ディレクトリを削除するのと同じくらい簡単です。
サフィックスと乱数を追加して新しいファイルをコピーし、既存のファイル名と衝突するのを避けます。
サンプル... 古いファイル="myfile.txt"、新しいファイル="myfile.txt.new.285387".
次に、コピー プロセスが正常に終了したら、私は... -古いファイルの名前を「myfile.txt.old.3464353」に変更します。-新しいファイルの名前を「myfile.txt」に変更します -最後に古いファイルが消去されます。