我正在做一個文字處理器。問題是如何檢查一個文件是否保存在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