2016-07-12 25 views
0

Warum docx re-compressed mit ZipFile.CreateFromDirectory ist nicht identisch mit Original?Dekomprimierungsdateien dekomprimieren, ihren Inhalt vergleichen und eine neue zusammengeführte docx-Datei erstellen

Ich baue ein Modul für den Vergleich "docx" (und andere Word-Dokumente). Als erstes entpacke ich zwei "docx" -Dateien. Dann vergleiche und füge ich die XML-Dateien in der Verzeichnisstruktur ein, die nach der Dekomprimierung der Dokumente erstellt wurden. Am Ende komprimiere ich das zusammengeführte Verzeichnis und erstelle die neue "docx" -Datei. Die beiden "docx" -Dateien (die ursprüngliche und die zusammengeführte Datei) sind laut Microsoft-Wortvergleich identisch. Auch die XML-Inhalte sind nach CRC32-Vergleich gleich, aber die Größe oder der CRC32-Wert der zusammengeführten "docx" -Datei unterscheiden sich von der ursprünglichen. Für die Dekomprimierung verwende ich die System.IO.Compression-Bibliothek.

Ist das ein Komprimierungsproblem? Was ist der Komprimierungsalgorithmus, den das Microsoft Word (und andere Viewer) zum Erstellen von offenen XML-Dokumenten wie "docx" -Dateien verwenden?

Ich führe einige Unit-Tets für mehrere Docx-Vergleiche. Also denke ich, der einzige Weg, um zu überprüfen, ob ein Test korrekt übergeben wurde, ist der Vergleich der CRC32-Nummern.

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

Können Sie bitte klären, welches Problem Sie haben? (docx ist in der Tat ZIP - Sie finden alle Details in der offiziellen Dokumentation - https://msdn.microsoft.com/en-us/library/dd773189(v=office.12).aspx) –

+0

Nach ** dekomprimieren ** und dann ** komprimiere ich ein zusammengeführtes Dokument, der crc32-Wert ist anders, aber die docx-Datei ist die gleiche wie die ursprüngliche. – dsmyrnaios

Antwort

0

Docx ist ZIP-Datei. Solange entkomprimierter Inhalt identisch ist, können die gleichen Dateien aus der Sicht von Word betrachtet werden (es sei denn, Sie müssen die ZIP-Datei aus irgendeinem Grund selbst signieren).

Das ZIP-Dateiformat erfordert kein bestimmtes Format für komprimierte Daten - es erlaubt ausdrücklich Variationen der Komprimierungsqualität. Jede Komprimierungsbibliothek/jedes Tool kann den Komprimierungsgrad basierend auf seinen internen Kriterien frei wählen. Es ist unwahrscheinlich, dass 2 verschiedene Implementierungen identische ZIP-Dateien aus demselben Inhalt erzeugen, selbst wenn die Optionen der Komprimierung ähnlich sind.

I.e. sogar Probe haben Sie die Fähigkeit, zu wählen CompressionLevel: ZipFile.CreateFromDirectory(...,CompressionLevel.Fastest, ...);.

Ähnliche Fragen, die zuvor auf SE diskutiert wurden: ZIP files created with GUI have more bytes than ZIP files created in a shell.