检查文件是否已保存在C#中的最佳方法?

检查文件是否已保存在C#中的最佳方法?,c#,C#,我在做文字处理器。问题是如何检查文件是否以C#格式保存?就像当用户单击X按钮时,程序将检查文件是否保存,如果是,则将关闭文件,否则程序将要求用户确认用户是否要关闭文件 我认为使用MD5散列可以是一种实用的方法,但这是最好的方法吗?您可能希望使用一个“脏标志”来跟踪文件是否已被修改。首先,它被设置为false,一旦用户修改了内容,该标志就被设置为true。保存修改后,该标志再次设置为false。这种方法的缺点是,保存后修改内容,然后再次修改,使其与保存的版本相似,您将不知道它是相同的 或者,您可以

我在做文字处理器。问题是如何检查文件是否以C#格式保存?就像当用户单击X按钮时,程序将检查文件是否保存,如果是,则将关闭文件,否则程序将要求用户确认用户是否要关闭文件


我认为使用MD5散列可以是一种实用的方法,但这是最好的方法吗?

您可能希望使用一个“脏标志”来跟踪文件是否已被修改。首先,它被设置为false,一旦用户修改了内容,该标志就被设置为true。保存修改后,该标志再次设置为false。这种方法的缺点是,保存后修改内容,然后再次修改,使其与保存的版本相似,您将不知道它是相同的

或者,您可以使用散列函数。这很好,因为它确实比较了内容,但它可能会导致大文件的性能问题(您应该测试这是否是一个问题)。也存在冲突的可能性,但除非您选择了一个非常糟糕的散列函数,否则冲突应该不会成为问题

当然,也可以将这两种方法结合起来,在用户修改内容时使用dirty标志,然后在dirty标志设置为true且用户试图关闭应用程序时使用哈希函数

更好的方法可能存在,但这是我的两分钱。

你可以使用comtypes

下面的代码段是从中复制粘贴的


//do your stuff是指文件保存或未保存的时间?未保存。文件是脏的。虽然绝对正确,但仅仅为了获得
IsDirty
标志就有点过分了。如果
dirty
标志是脏的,那么它就是脏的。散列只有在文件在用户范围之外修改时才有用,例如多用户编辑(OneNote),但我可能会使用一些版本字段,而不是比较庞大的文件
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

}