C# 避免因断电而导致文件损坏

C# 避免因断电而导致文件损坏,c#,.net-4.5,C#,.net 4.5,我正在用.NETC#编写一个简单的应用程序,它将ZIP文件上传到中央服务器进行处理 但是,此应用程序将使用的环境很容易频繁断电 我目前正在使用file.ReadAllBytes读取文件,并通过将生成的字节数组传递给WebClient.UploadData进行上载 假设断电中断了对ReadAllBytes的调用,是否会发生文件损坏,以及如何最好地处理这种可能性 谢谢 Roberto如果断电中断了读取,当然会中止读取。我不明白问题的这部分。你应该关注写作 这里有两种写入可能出错: 将ZIP文件写入磁

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

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

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

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

谢谢


Roberto

如果断电中断了读取,当然会中止读取。我不明白问题的这部分。你应该关注写作

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

  • 将ZIP文件写入磁盘。如果中断,您将获得一个部分文件。您可以通过先将ZIP写入临时文件,然后仅在完成后重命名它来确保安全。您还必须在重命名之前插入一个
    刷新
    。在NTFS上,重命名是原子的和崩溃安全的
  • 通过网络写入服务器。您可以通过首先提交预期的文件长度(或散列)来确保安全。服务器必须验证该长度,以确保传输完成

  • 如果使用这些方法检测到任何类型的错误,您需要重新启动该过程。

    随机思考:获取UPS?抽象地说,是的。但是对于最终用户来说这是不可能的:)文件是否在NTFS卷上?这会更“安全”,但并不安全:ReadAllBytes()不能破坏文件。UploadData()中断时会发生什么情况完全取决于服务器的FTP或HTTP实现。如果发现这个问题不需要很长时间,可以使用任务管理器终止该程序。