未保存更改检测的实现

时间:2011-10-06 06:17:38

标签: algorithm language-agnostic save savechanges

在文本/图像/数据文件中检测未保存的更改似乎有三种方法可能是:

  1. 每次用户进行更改或保存时都会更新布尔标志,这会导致大量不必要的更新。

  2. 保留原始文件的缓存副本,并在每次需要检查保存操作时将两者区分开来。

  3. 根据需要保留所有过去操作和推/弹操作的堆栈,从而导致大量额外的内存使用。

  4. 一般而言,商业应用程序如何检测是否存在未保存的更改以及每种方法的优点/缺点是什么?我在编写具有特殊保存行为的自定义应用程序时遇到了这个问题,并且想知道是否存在已知的最佳实践。

2 个答案:

答案 0 :(得分:2)

只要您需要撤消/重做系统,就需要一堆过去的操作。为了检测文档的状态,堆栈的项目被设置为“已保存状态”。当前堆栈节点不是该项,文档已更改。

您可以在Qt QUndoStack(http://doc.qt.nokia.com/stable/qundostack.html)及其isClean()setClean()

中查看此示例

对于命题1,更新布尔值不是问题,只需要很少的时间。

答案 1 :(得分:0)

这取决于你想要的功能和文件的大小/格式,我想。

第一个选项是最简单的选项,它可以为您提供所需的最小开销。

第二个选项的优点是,您可以检测何时手动还原更改,以便毕竟没有真正的更改(尽管这可能不会经常发生)。另一方面,制作差异以检查是否有任何修改成本要高得多。每当用户按下某个键时,您可能不希望这样做。

第三个选项提供了提供撤消历史记录的功能。您可以通过将连续进行的更改分组(不在其间移动光标)或类似的内容来限制该历史记录中的项目数。