如何快速检查zip文件是否已损坏?

时间:2010-10-17 17:58:51

标签: compression zip unzip corruption

有没有人对如何根据文件大小实用快速检查zip文件是否有损有任何想法?理想情况下,检查zip是否已损坏的最佳方法是进行CRC校验,但这可能需要很长时间,尤其是在存在大量zip文件的情况下。我很高兴能够快速进行文件大小或标题检查。

提前致谢。

4 个答案:

答案 0 :(得分:6)

DotNetZip是一个免费的开源库,用于处理.NET语言的zip文件,支持CheckZip()方法,可以满足您的需要。您可以选择各种级别的保证。基本级别只检查元数据的一致性。最完整的级别将zip文件完全提取到bitbucket中,以验证实际的压缩数据是否已损坏。

答案 1 :(得分:4)

使用zip -T测试文件是否已损坏。示例损坏的文件如下所示:

 zip -T filename.zip
        zip warning: missing end signature--probably not a zip file (did you
        zip warning: remember to use binary mode when you transferred it?)
        zip warning: (if you are trying to read a damaged archive try -F)

zip error: Zip file structure invalid (filename.zip)

答案 2 :(得分:2)

Section 4.3.7 of this page表示压缩大小是从字节18开始的4个字节。您可以尝试读取它并将其与文件大小进行比较。

但是,我认为检查zip文件是否已损坏几乎没用,原因有两个:

  1. 某些zip文件包含的字节数多于zip部分。例如,self-extracting archives有一个可执行部分,但它们仍然是有效的zip。
  2. 文件可能会损坏而不会改变其大小。
  3. 因此,我建议计算CRC以确保检查损坏的保证方法。

答案 3 :(得分:1)

要检查整个存档'确定',您需要提取所有数据(因为CRC,存储在存档中,是通过未压缩数据计算的),即使在此之后,您也无法确定100%它是否已损坏(因为CRC很好,但不保证数据没有改变)。