我正在做一个文字处理器。问题是如何检查一个文件是否保存在C#中?就像当用户点击按钮时,程序会检查文件是否保存,如果是则关闭文件,否则程序会要求用户确认用户是否要关闭文件。检查文件是否已经保存在C#中的最佳方法是什么?
我认为使用MD5哈希可以是一种实用的方式,但这是最好的方式吗?
我正在做一个文字处理器。问题是如何检查一个文件是否保存在C#中?就像当用户点击按钮时,程序会检查文件是否保存,如果是则关闭文件,否则程序会要求用户确认用户是否要关闭文件。检查文件是否已经保存在C#中的最佳方法是什么?
我认为使用MD5哈希可以是一种实用的方式,但这是最好的方式吗?
您可能想要使用一个“脏标志”来跟踪文件是否已被修改。它首先设置为false,并且只要用户修改了内容,该标志就设置为true。一旦保存修改,该标志将再次设置为false。这种方法的缺点是你在保存后修改内容,然后再次修改它与保存的版本类似,你不会知道它是一样的。
或者,您可以使用散列函数。这很好,因为它真的比较内容,但它可能会导致大文件的性能问题(您应该测试它是否有问题)。也有碰撞的可能性,但除非你选择一个非常糟糕的散列函数,否则它们不应该成为问题。
当然,也可以结合使用这两种方法,并在用户修改内容时使用脏标志,如果脏标志设置为true并且用户试图关闭应用程序,则使用散列函数。
可能存在更好的方法,但这是我的两分钱。
您可以使用comtypes ..
下面的代码片段被复制从
using ComTypes = System.Runtime.InteropServices.ComTypes;
ComTypes.IPersistFile persistFile = (ComTypes.IPersistFile)documnet;
//Checks an object for changes since it was last saved to its current file.
if (persistFile.IsDirty)
{
//do your stuff
}
粘贴如果'dirty'标志_dirty_那么它是** **脏。散列只能用于在文件被修改超出用户范围之外(如多用户编辑(OneNote)),但然后我可能会使用一些版本字段而不是比较我的流行文件 – MickyD