2017-04-02 28 views
-1

我有以下代碼:C#確保所有操作完成或者沒有

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紀念更與抽象對象的狀態持久性有關。在這種情況下,問題集中在自己的事務操作上。 –

回答

0

我建議你實現一個.NET兩階段提交資源管理器。您的RM可以爲您對文件系統進行的每次更改保存備份文件,當DTC組件調用邏輯來回滾您的更改時。您可以恢復先前製作的備份文件。

Check out this documentation

使用TxF的和KTM描述herehere會幫助你,因爲在Vista + Windows版本已經實現。

TxF(Transactional Filesystem)與NTFS格式一起使用。 Win32 API合同沒有改變,這對你來說是一個很好的選擇。因爲所有通過.NET Framework公開的IO的API都是相同的。您只需直接調用幾個Win32 API,即可獲得Windows中包含的這一新功能的所有優點。使用DTC將允許您跨文件系統和數據庫執行事務性工作。因此,如果出現錯誤拋出,所有更改將在數據庫和文件系統中回滾。

0

中有辦法做到這一點沒有內置。您需要考慮應用程序的功能並提供撤消每項操作的方法。

例如,您可以刪除您複製的文件,您可以刪除您插入的行,並同樣刪除您寫入文件的文本。

看看異常處理

+0

這個答案並不指向解決方案或文檔。 –

相關問題