避免因停电而导致文件损坏

时间:2013-10-13 11:49:15

标签: c# .net-4.5

我正在.Net C#中编写一个简单的应用程序,它将ZIP文件上传到中央服务器进行处理。

但是,此应用程序将使用它的环境容易频繁断电。

我目前正在使用File.ReadAllBytes读取文件,并通过将生成的字节数组传递给WebClient.UploadData来上传。

假设停电会中断对ReadAllBytes的调用,可能会发生文件损坏以及如何最好地处理这种可能性?

谢谢,

罗伯特

1 个答案:

答案 0 :(得分:2)

如果断电中断读数,当然读数将被中止。我不明白这部分问题。您应该关注写作

这里有两种写法可能出错:

  1. 将ZIP写入磁盘。如果被打断你得到一个部分文件。您可以通过首先将ZIP写入临时文件然后在完成后重命名它来使此安全。您还必须在重命名前插入Flush。在NTFS上重命名是原子和崩溃安全的。
  2. 通过网络写入服务器。您可以通过首先提交预期的文件长度(或散列)来确保安全。服务器必须验证该长度以确保传输完成。
  3. 如果使用这些方法检测到任何类型的错误,则需要重新启动该过程。