为什么使用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);
}
答案 0 :(得分:0)
Docx是ZIP文件。只要解压缩的内容是相同的,从Word的角度来看,文件可以被视为相同(除非您出于某种原因需要签署ZIP文件)。
ZIP文件格式不需要某种特定的压缩数据格式 - 它明确允许压缩质量的变化。每个压缩库/工具都可以根据其内部条件自由选择压缩级别。即使选项传递给压缩类似,2个不同的实现也不太可能从相同的内容生成相同的ZIP文件。
即。即使是示例,您也有能力选择CompressionLevel:ZipFile.CreateFromDirectory(...,CompressionLevel.Fastest, ...);
。
以前在SE上讨论的类似问题:ZIP files created with GUI have more bytes than ZIP files created in a shell。