2012-01-11 63 views
0

有誰知道如何在引發異常時在文件複製中實現回滾函數。C#文件複製退回

這裏有一些條件,當我將文件複製:

  1. 將文件複製到共享文件夾
  2. 文件不超過3MB
  3. 文件是圖像文件(JPG,JPEG,BMP ,GIF,PNG)
  4. 預防文件名重複的已實現
  5. OS是Windows XP及更高
  6. 代碼是C#.net 4.0 V中isual Studio 2010的專業
  7. 網絡連接局域網
  8. 多個文件進行復制,回滾時,拋出一個異常

請幫助。 在此先感謝。

+0

難道你只是試圖刪除文件做回滾。您可以使用try catch語句來捕獲錯誤。 – Dessus 2012-01-11 02:25:05

+0

如果不顯示一些代碼,恐怕你不會得到很多幫助。你是說你想刪除所有複製的第一個文件,如果一個副本失敗? – 2012-01-11 02:26:09

回答

2

是的。回去並刪除所有文件。

根據你的結構,你可以做很多事情。如果你有一個List<string>,例如,重複使用int

for(int i = 0; i < filesToCopy.Count; i++) { 
    try { 
     // Copy the file 
    } catch(Exception ex) { 
     // Rollback 
     while(--i >= 0) { 
      System.IO.File.Delete(filesToCopy[i]); // For example 
     } 

     break; 
    } 
} 
+1

如果複製操作覆蓋目標中的現有文件會怎麼樣?回滾後,舊版本的文件將消失。 – ean5533 2012-01-11 02:27:33

+0

@ ean5533:嗯......好點。稍微不方便地將其返回而不引入其他錯誤。 – Ryan 2012-01-11 02:32:18

+1

@ ean5533閱讀條件#4。沒有現有的文件要覆蓋。 – 2012-01-11 02:34:00

0

您可以跟蹤成功複製文件並刪除它們中的每一個,當你決定回滾。但是,您是否認爲通常修改共享上的文件(包括在回滾期間刪除它們)的能力取決於網絡連接?

換句話說,如果異常是由於網絡故障導致的,那麼您將永遠無法回滾 - 除非另一方控制着另一個可以與之配合的程序。

+0

如果存在網絡問題,系統將不會運行。我會嘗試你的建議。感謝你的回答。 – 2012-01-11 02:39:10

+0

@JohnIsaiahCarmona:那麼系統可以預測,網絡將在未來停止並拒絕啓動? ;-) – Jon 2012-01-11 02:45:37