Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compression 如何快速检查zip文件是否损坏?_Compression_Zip_Unzip_Corruption - Fatal编程技术网

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

Compression 如何快速检查zip文件是否损坏?,compression,zip,unzip,corruption,Compression,Zip,Unzip,Corruption,有人知道如何根据文件大小实用地快速检查zip文件是否损坏吗?理想情况下,检查zip是否损坏的最佳方法是执行CRC检查,但这可能需要很长时间,尤其是在存在大量大型zip文件的情况下。我会很高兴能够做一个快速的文件大小或头检查 提前感谢。表示压缩大小为4字节,从字节18开始。您可以尝试读取它并将其与文件大小进行比较 但是,我认为检查zip文件是否损坏几乎没有用,原因有两个: 有些zip文件包含的字节比zip部分多。例如,有一个可执行部分,但它们仍然有效 文件可能会损坏,而不会更改其大小 因此,我建议

有人知道如何根据文件大小实用地快速检查zip文件是否损坏吗?理想情况下,检查zip是否损坏的最佳方法是执行CRC检查,但这可能需要很长时间,尤其是在存在大量大型zip文件的情况下。我会很高兴能够做一个快速的文件大小或头检查

提前感谢。

表示压缩大小为4字节,从字节18开始。您可以尝试读取它并将其与文件大小进行比较

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

  • 有些zip文件包含的字节比zip部分多。例如,有一个可执行部分,但它们仍然有效
  • 文件可能会损坏,而不会更改其大小

  • 因此,我建议计算CRC以保证检查损坏的方法。

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

    要“确定”检查整个归档文件,您需要提取所有数据(因为存储在归档文件中的CRC是对未压缩数据进行计算的),并且,即使在这之后,您也无法100%确保它没有损坏(因为CRC是良好的,但不能保证数据没有被更改).

    使用
    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)
    

    此外,许多zip创建工具会在知道文件长度之前写入头文件,因此这些字节保持为零(大概是为了支持流式传输)。@SimonJ所说的是正确的,但是-从字节18开始的压缩大小是zip文件中单个条目的压缩大小。这不是zip文件的压缩大小。同样,这可能是显而易见的,但值得一提的是:“计算CRC”可以验证文件,只有在知道原始CRC的情况下。我目前正在使用c#完成我的任务,但语言无关紧要。CodePlex已经失效,这些页面现在是“存档”。这可能是相同的代码?非常方便。也可用于区分文件扩展名不可靠的文档和docx文件。