在.NET中,我需要一種方法來比較兩個文件。我想到一個類,它代表一個差異:獲取兩個文件的差異
public enum DiffEntryState
{
New,
Removed,
Changed
}
public class DiffEntry
{
public byte[] Bytes;
public long FileOffset;
public DiffEntryState State = BackupByteEntryState.Changed;
}
名稱應該是不言自明的。我想爲每個條目添加一個狀態,以便我可以區分第一個文件大於第二個文件的情況,反之亦然。
我想知道,如果有一個共同的和快速的方式來檢索兩個文件的逐字節的差異。我只是簡單地爲每個文件創建一個流,然後比較這些流的塊,直到結束。有沒有更好的方法,還是框架有一個內置的解決方案?請記住,我需要自己的差異,不僅僅是反饋意見有差異。
//編輯:
對這個問題每天睡後,我想我採取了錯誤的方式在這裏。整個工具是一個備份解決方案,它只能保存更改的字節,從而減少備份的整體必要空間。而不是每次保存一個壓縮的14 MB文件,只保存200k或更少的文件。
但是,在考慮了這個問題之後,我意識到僅僅保存每個字節的差異是不夠的。以文本爲例:
「這是一個字符串。」 「這是一個字符串。」
事實上,這裏唯一的變化是「是」到「是」。但是我的方法會假定改變的內容現在「是一個字符串」。如果這發生在一個巨大文件的開頭,那麼這種方法是無用的。 顯然,我需要一種方法來索引一個文件並檢測所有移動,複製或更改的塊與原始文件相比較。 P ...
你需要比較哪種文件?文本?圖片? ... – 2012-02-11 13:34:59
這些文件可以是任何形式,這就是爲什麼我採取字節的方法... – 2012-02-11 14:32:50
在這種情況下,你可以定義什麼'新',''刪除'和'改變'意味着例如在圖像文件?或者在'.doc'文件中?這些概念在一般情況下很難理解。 – 2012-02-11 14:37:58