2013-10-13 60 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. 通过网络写入服务器。您可以通过首先提交预期的文件长度(或散列)来保证安全。服务器必须验证该长度以确保传输已完成。

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