解压缩docx文件,比较它们的内容并创建一个新的合并docx文件

时间:2016-07-12 15:31:57

标签: c# zip comparison ms-office docx

为什么使用ZipFile.CreateFromDirectory重新压缩docx与原始版本不一致?

我为" docx"建立一个模块。 (和其他单词文件)比较。首先,我解压缩了两个" docx"文件。然后我比较并合并文档'之后创建的目录结构中的xml文件。减压。最后,我压缩合并的目录并创建新的" docx"文件。这两个" docx"根据Microsoft单词比较,文件(原始文件和合并文件)相同。根据CRC32比较,xml内容也是相同的,但是合并的" docx"的大小或CRC32值都是相同的。文件与原始文件不同。对于减压,我使用了 System.IO.Compression库。

这是压缩问题吗?什么是微软词(和其他观众使用)用于创建开放式xml格式文档的压缩算法,例如" docx"文件?

我为几个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);
 }

1 个答案:

答案 0 :(得分:0)

Docx是ZIP文件。只要解压缩的内容是相同的,从Word的角度来看,文件可以被视为相同(除非您出于某种原因需要签署ZIP文件)。

ZIP文件格式不需要某种特定的压缩数据格式 - 它明确允许压缩质量的变化。每个压缩库/工具都可以根据其内部条件自由选择压缩级别。即使选项传递给压缩类似,2个不同的实现也不太可能从相同的内容生成相同的ZIP文件。

即。即使是示例,您也有能力选择CompressionLevelZipFile.CreateFromDirectory(...,CompressionLevel.Fastest, ...);

以前在SE上讨论的类似问题:ZIP files created with GUI have more bytes than ZIP files created in a shell

相关问题