2016-07-12 5 views
0

docxをZipFile.CreateFromDirectoryで元のファイルに再圧縮するのはなぜですか?docxファイルを解凍し、その内容を比較し、新しい併合されたdocxファイルを作成します

私は "docx"(および他のワードドキュメント)比較用のモジュールを構築しています。まず、2つの "docx"ファイルを解凍します。次に、ドキュメントの解凍後に作成されたディレクトリ構造のxmlファイルを比較してマージします。最後に、マージされたディレクトリを圧縮し、新しい "docx"ファイルを作成します。 2つの "docx"ファイル(元のファイルとマージされたファイル)は、Microsoftの単語比較では同じです。また、xmlの内容はCRC32の比較でも同じですが、マージされた "docx"ファイルのサイズまたはCRC32値は元のものとは異なります。圧縮解除の場合は、 System.IO.Compressionライブラリを使用します。

これは圧縮の問題ですか? 「docx」ファイルなどのオープンxml形式の文書を作成するためにMicrosoft Word(および他の閲覧者が使用する)の圧縮アルゴリズムは何ですか?

いくつかの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ファイルです。圧縮されていないコンテンツが同じファイルである限り、何らかの理由でZIPファイル自体に署名する必要がない限り、Wordの観点からは同じファイルとみなすことができます。

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

関連する問題