您建议在写入文件时保护用户数据的最佳做法是什么?

问题描述 投票:1回答:4

假设您有一个程序,例如文本编辑器或文字处理器,可以写入用户创建的文件。 在崩溃,空间不足错误,突然断电,竞争状况等情况下,应采取什么步骤来保证数据丢失或损坏的最小风险?

file persistence writing
4个回答
1
投票

保护重要数据的一个好的经验法则是

永远不要修改唯一的副本

对于文字处理器和文本编辑器,我相信创建“影子副本”(这可能不是技术术语)的标准是,它是进行所有更改的原始文件的副本。 您可以定期(或在用户请求时)强制进行保存,该保存包含对原始文件的修改。 这样的好处是,如果在任何时候出现故障,则总是至少有一个有效的数据副本。

真正的目标是实现原子性-操作只能成功或失败,永远不会有不完整的状态。 除了“影子副本”以外,还有许多其他方法可以实现原子性,但这就是我相信文本编辑器可以做到的方式。


0
投票

使用SQLite

好吧,好的,将DB用于文本编辑器很奇怪,但是文字处理器的状态如此之多以至于有些道理。 当然,对于许多应用程序来说,将其作为一种存储格式是有意义的。 SQLite Wiki网站上有一个页面介绍如何将其用于撤消/重做日志。

对于文本编辑器,您可以使用数据库所采用的技术:预先写入日志或回滚日志,以及与磁盘的良好提交同步。 或者,您可以存储每个文件的两个版本。


0
投票

对于类似的问题,我写了一个较早的答案 ,也适用于此。 这些步骤是:

  1. 用新数据写一个临时文件
  2. 将临时文件移动到原始文件目录中的备份文件。
  3. 对备份文件和原始文件执行原子交换(在Windows中为File.Replace或在Unix中交换inode)。
  4. 删除备份(现在是原始文件)。

0
投票

对于今天的数千兆字节的机器来说,这也许已经过时了,但是我记得在Mac上进行开发时,我们曾经分配了一个内存块,该内存块足以执行保存操作。

如果内存不足,我们可以向用户发出警告,告知他/她内存不足,然后释放该块,以便进行实际的保存操作。

其他对保存用户数据很重要的功能是提供撤消功能-理想情况下是无限的撤消/重做操作。

© www.soinside.com 2019 - 2024. All rights reserved.