我正在尝试编写一个字处理器程序来处理巨大的文件。现在每当用户关闭文件时,我都会提示他们"你想保存文件"如果文件已被修改。
我使用每当用户进行任何写操作时设置的脏位来实现它。
但是,这有一个限制,即文件实际上并不脏时会被视为脏。例如,如果用户键入一个字符并将其删除,则该文件未更改。然而,我的"脏位"实施认为它已经改变了。
在速度方面最好的方法是检测文件是否真的发生变化?
整个文件的完整比特比较太慢。 (比较文件哈希也太慢,因为需要处理整个文件来计算哈希值。在比较值时,首先进行长度比较,当长度不同时,失败当它们不是#39; t,就像我上面的例子一样。)
答案 0 :(得分:1)
由于这是一个文字处理程序,它也可以有行动历史。您可以维护2个堆栈,一个用于历史操作(已经包含的更改),另一个用于将来的操作(已应用的更改,但现在已经以线性方式还原)。
例如,按顺序键入的每个字符都可以是操作堆栈中的一个项目,将其删除可能相当于将该操作从历史记录项堆栈弹出到堆栈的未来操作(如果您需要重做操作)。
现在,每当历史记录的行动' stack不为空,提示用户在关闭时关闭文件。
为简单起见,您可以使用有限数量的历史记录项(比如最近100次操作)。然后,由于每次用户操作都会对文档进行每次加/减,因此几乎没有任何延迟,并且确定堆栈是否为空是O(1)操作。