我正在开发一个基于文档的桌面应用程序,当用户保存文档时,该应用程序会将相当大且复杂的文件写入磁盘。为防止数据损坏,最好的做法是什么?有很多事情可以发生:
保存过程可能会中途失败,这当然是一个严重的应用程序错误,但在这种情况下,人们宁愿让旧文件留下比损坏的半写文件。如果应用程序因文件写入中途的某些其他原因而终止,则会出现同样的问题。
我能想到的最强大的方法是在保存时使用临时文件,并且只有在成功创建新文件后才替换原始文件。但我发现有几个操作(创建临时文件,保存到临时文件,删除原始文件,移动临时文件到原始文件)可能会或可能不会失败,我最终会遇到相当复杂的try / catch语句来正确处理它们。 / p>
这种情况是否有最佳做法/标准?例如,将原始文件复制到临时文件然后覆盖原始文件比保存到临时文件更好吗?
另外,基于文档的应用程序(在Windows中)文件状态的原因是什么?在用户关闭文档之前,将文件保持打开以供应用程序写入是不是更好,或者只是在打开时快速读取文件并快速关闭它?优点和缺点?
答案 0 :(得分:1)
通常,文件改组舞蹈就是这样的,目的是最终得到包含新数据的file.txt
:
您始终至少拥有一个有效文件:
这假设您正在使用原子移动操作的文件系统。如果情况并非如此,我相信程序是一样的,但你需要对恢复程序更加小心。
答案 1 :(得分:0)
回答上一个问题:
如果我们在这里谈论相当复杂和大的文件,我会选择在阅读时锁定文件我可能不需要在视图上加载所有数据,但现在只需要一个用户。
首先是:
答案 2 :(得分:0)
创建临时文件,然后用临时文件替换原始文件(后者在I / O方面是一种廉价的操作)是MFC文档持久性类使用的机制。我从未见过它失败过。用户也没有报告此类问题。当时是的,文件很大(它们也很复杂,但就I / O而言,这是无关紧要的。)