2012-06-18 45 views
4

我一直在搜索&使用Google搜索了很多關於這個問題,並且我已經知道如何比較兩個文件(哈希,校驗和等)。但這不是我所需要的。我需要下面描述。比較兩個版本的文件並對舊文件應用更改

讓我們假設我有一個文件,我已經備份了它。後來我對這個文件做了一些更改,所以我想將更改應用到備份版本。由於兩個文件可能足夠大並且變化很小,我不想重寫所有文件,因爲我打算通過互聯網(也許是FTP)備份它,這可能需要很長時間。

我怎麼看這個(樣品):

文件的備份版本(字節)

134 253 637 151 

較新版本的文件(字節)

134 624 151 890 

不是重寫所有字節,我們應該:

  1. change 253624(變化字節)
  2. 在文件的結尾(插入字節)除去637字節(除去字節)
  3. 寫入890

1,2,3-選項不必出現在一次在每種情況下。 請注意,備份文件可能位於其他地方,我只能通過互聯網訪問它(服務器可能會返回一些內容,以便我們可以比較文件)。

我該如何實現這一目標?我知道這是可能的,因爲我知道軟件在哪裏實現(但不知道如何)。 任何提示,教程等歡迎和高度appriciated。 在此先感謝。

+1

您檢查了'diff'的實施? (http://en.wikipedia.org/wiki/Diff) –

+0

是的,我已經看到了這一點,我知道我可以找到差異,但我實際上並沒有理解如何sohuld我轉移一些字節,並迫使他們被插入特定的地方......我應該將這些字節與附加地點號碼一起傳輸嗎? – GaaRa

+0

你在比較文本或二進制信息 - 你可能想看看像http://www.daemonology.net/bsdiff/ – Slugart

回答

8

您正試圖解決每個MMORPG解決的問題......創建和應用小補丁文件以更新舊版本的大型二進制文件。

這是一個經過深入研究的問題,並且有很多解決方案。對於一些現有的選項,請參閱

Binary patch-generation in C#

+0

我知道我也可以將其應用於使我的軟件可更新? – GaaRa

+0

是的,事實上Windows Installer可以生成補丁文件(如同許多其他開源和商業解決方案一樣)。 –