我正在开发基于文档的桌面应用程序,该应用程序在用户保存文档时将相当大且复杂的文件写入磁盘。在这里做什么是防止数据损坏的最佳做法?有很多事情可能发生:覆盖文档文件
保存过程可能会失败一半,这当然是一个严重的应用程序错误,但在这种情况下,宁愿让旧文件比损坏的半写入文件。如果在文件写入过程中由于其他原因导致应用程序终止,则会发生同样的问题。
我能想到的最稳健的方法是在保存时使用临时文件,并且只有在新文件成功创建后才替换原始文件。但是我发现有几个操作(创建tempfile,保存到tempfile,删除原始文件,将tempfile移动到原始文件),可能会也可能不会失败,并且我最终会遇到相当复杂的try/catch语句来处理它们。
这种情况下是否有最佳做法/标准?例如,将原始文件复制到临时文件然后覆盖原始文件比保存到临时文件更好?
此外,如何以文件为基础的应用程序(在Windows中)的文件状态的原因?在用户关闭文档之前将文件保留为打开状态,或者快速打开文件并快速关闭它,是否更好?优点和缺点?
谢谢乔恩。假设文件可以被部分更新而不是完全重写(例如OPC包文件),您是否同意这只是在4个项目符号之前的一个额外步骤:将file.ext复制到file.ext.new以使模板从...开始?我使用可部分更新的格式的原因之一是性能,我担心预先复制整个旧文件可能会取消部分性能提升。需要测量我猜。 –
@Anders:是的,这是有道理的。基本上,如果你不能容忍以*部分*更新的文件结束,你真的必须先复制它... –