2013-10-13 69 views
2

我正在使用.Net C#編寫一個簡單的應用程序,它將ZIP文件上傳到中央服務器進行處理。避免由於停電導致的文件損壞

但是,此應用程序將使用它的環境易受頻繁斷電的影響。

我正在使用File.ReadAllBytes來讀取文件,並通過將結果字節數組傳遞給WebClient.UploadData來進行上傳。

假設停電會中斷對ReadAllBytes的調用,是否會發生文件損壞以及如何最好地處理這種可能性?

感謝,

羅伯託

+4

隨機想法:得到一個UPS? – LittleBobbyTables

+0

摘要,是的。但它不可能爲最終用戶:) –

+0

NTFS捲上的文件?這將是'更安全',但不安全:http://superuser.com/questions/194412/is-ntfs-fail-safe-in-case-of-a-power-outage – rene

回答

2

如果突然斷電的閱讀,當然讀數將被中止。我不明白這個問題的這一部分。您應該關注撰寫

兩種寫的可以去錯在這裏:

  1. 寫入ZIP磁盤。如果中斷,你會得到一個部分文件。首先將ZIP文件寫入臨時文件,然後在完成後重命名該文件即可。在重命名之前,您還必須插入Flush。重命名在NTFS上是原子性的和崩潰安全的。
  2. 通過網絡寫入服務器。您可以通過首先提交預期的文件長度(或散列)來保證安全。服務器必須驗證該長度以確保傳輸已完成。

如果使用這些方法檢測到任何類型的錯誤,則需要重新啓動該過程。