2016-07-12 44 views
0

爲什麼與ZipFile.CreateFromDirectory重新壓縮的docx與原始文件不同?解壓縮docx文件,比較它們的內容並創建一個新的合併的docx文件

我正在構建一個「docx」(和其他word文檔)比較的模塊。首先我解壓縮兩個「docx」文件。然後,我比較併合並文檔解壓縮後創建的目錄結構中的xml文件。最後,我壓縮合並的目錄並創建新的「docx」文件。根據Microsoft單詞比較,兩個「docx」文件(原始文件和合並文件)是相同的。根據CRC32比較,xml內容也是相同的,但合併的「docx」文件的大小或CRC32值與原始大小不同。對於解壓縮,我使用了System.IO.Compression庫 。

這是壓縮問題嗎? Microsoft Word(和其他查看器使用)創建開放xml格式文檔(如「docx」文件)的壓縮算法是什麼?

我運行一些單位tets幾個docx比較。所以我認爲檢查測試是否正確傳遞的唯一方法是比較crc32數字。

public static void CreateCompressFile(string dirinfo, string originalFile) 
{ 
    FileInfo fi = new FileInfo(originalFile); 
    ZipFile.CreateFromDirectory(dirinfo, 
     originalFile.Replace(fi.Extension, "_tmp" + fi.Extension), 
     CompressionLevel.Fastest, false); 
} 
+0

你能說清楚你有什麼問題嗎? (docx的確是ZIP - 你可以在官方文檔中找到所有的細節 - https://msdn.microsoft.com/en-us/library/dd773189(v=office.12).aspx) –

+0

**解壓後**和然後**重新壓縮**合併的文檔crc32值不同,但docx文件與原始文件相同。 – dsmyrnaios

回答

0

Docx是ZIP文件。只要解壓縮的內容是相同的文件可以被認爲是相同的從Word的角度來看(除非你需要簽署ZIP文件本身出於某種原因)。

ZIP文件格式不需要壓縮數據的某種特定格式 - 它明確允許壓縮質量的變化。每個壓縮庫/工具都可以根據其內部標準自由選擇壓縮級別。即使選項傳遞給壓縮類似,2個不同的實現也不可能從相同的內容產生相同的ZIP文件。

I.e.即使是樣品,您也可以選擇CompressionLevelZipFile.CreateFromDirectory(...,CompressionLevel.Fastest, ...);

SE上討論過的類似問題:ZIP files created with GUI have more bytes than ZIP files created in a shell

相關問題