2011-03-10 20 views
2

我試圖通過網絡保持文件同步。我不想在每次更改時傳輸整個文件,而是想找到並壓縮更改過的部分,並只傳輸這些文件,非常類似於例如。顛覆。有沒有可靠的C#解決這個問題,還是我必須自己寫?如何通過僅使用跟蹤的更改來壓縮文件?

+0

你可以使用rsync? – DanS 2011-03-10 12:57:17

+0

我不想使用外部程序。 – mafu 2011-03-10 13:00:51

回答

0

你有哪些格式的變化?字節[],字符串或流?

看看這裏: Compress and decompress strings in C#

+0

我還沒有更改,這是問題的一部分。 :)文件本身是字節[] – mafu 2011-03-10 13:00:16

2

的關鍵詞是 「差異算法」。在C#中有幾個實現。

Diff.NETA Generic, Reusable Diff Algorithm in C#看起來像合理的選擇。 Google會爲你找到另外幾百個選擇。

請注意,大多數差異算法是專門爲處理基於行的文本文件而設計的。
如果您想要比較二進制數據或行的部分,您需要在挑選差異庫時更加小心。

如果你想壓縮差異,你可以使用System.IO.Compression.GZipStream類。

+0

是的,它主要是關於二進制文件。鏈接看起來非常好。 – mafu 2011-03-10 13:05:12

1

This post可能會幫助你。

一般而言,您正在尋找一種將新文件與舊文件進行二進制比較的方法,然後僅刪除已更改的字節,壓縮它們,將它們傳輸到其他系統,解壓縮並將它們插入文件在適當的地點。因此,聽起來您需要在每一端都運行一個應用程序(如果您希望它可以同時運行,也許是同一個應用程序)。

+0

是的,我將在兩臺機器上運行該應用程序,就像您所描述的一樣。鏈接的帖子看起來很有趣。 – mafu 2011-03-10 13:03:03

+0

聽起來像一個有趣的項目,希望這有助於。 – 2011-03-10 13:05:55