2017-04-02 7 views
-1

を確認してください。私は、それぞれの操作が成功していることを確実にしたいC#の私は、次のコードしている全て完了するための操作またはnone

File.Copy(pathSource, pathDestination); //copy file 
ID3v2TagToDB(pathSource, pathDestination); //read his tags and save them to DB 
ID3v2TagToTXT(pathSource, pathDestination); //read his tags and save them to txt 
dgv.Rows[chosen[i]].DefaultCellStyle.BackColor = Color.GreenYellow; //color green datagridview row if copy and read successfull 

を。いずれかが失敗した場合は、以前のものをすべてロールバックする必要があります。

もが、中に発生しました発生しましたエラー、および操作についてユーザーに警告する。

+0

同様の目的のために、(おそらく)例外メカニズムを使用することができます。 (たぶん、.netの別の方法があります) – LmTinyToon

+0

これは、記念碑のパターンのための良い候補ではありませんか? – FCin

+0

@FCin mementoは、オブジェクトの状態の永続性を抽象化することに関連しています。この場合、問題はトランザクション処理そのものに焦点を当てています。 –

答えて

0

.NET Two Phase Commit Resource Managerを実装することをお勧めします。 RMは、DTCコンポーネントが変更をロールバックするロジックを呼び出すときに、ファイルシステムに加えた変更ごとにバックアップファイルを保存できます。以前に作成したバックアップファイルを復元することができます。 herehereを説明するように、すでにVistaの+のWindowsバージョンで実装されているので、あなたを助けるでしょうTXFとKTMを使用して

Check out this documentation

TxF(トランザクションファイルシステム)は、NTFS形式で動作します。 Win32 API契約は変更されていませんが、これは素晴らしいオプションです。 IOのすべてのAPIは、.NET Frameworkを介して公開されているため、同じです。いくつかのWin32 APIを直接呼び出すだけで、Windowsに含まれるこの新機能のすべての利点が得られます。 DTCを使用すると、ファイルシステムとデータベース間でトランザクション処理を行うことができます。エラースローの場合、すべての変更はデータベースとファイルシステム全体でロールバックされます。

0

何がこれを行う方法で構築ありません。アプリケーションが何をしているのかを考え、各操作を取り消す方法を提供する必要があります。

たとえば、コピーしたファイルを削除したり、挿入した行を削除したり、書き留めたテキストを削除したりすることができます。

例外処理を参照してください。

+0

この回答は、ソリューションまたはドキュメントを示していません。 –

関連する問題