使用Perl测试Windows系统上许多gzip压缩文件的有效性

时间:2015-01-10 14:33:04

标签: windows perl gzip

我在目录中(在Windows系统上)有数千(或更多)gzip压缩文件,我的一个工具会使用这些gzip压缩文件。如果遇到损坏的gzip文件,它会方便地忽略它们而不是发出警报。

我一直在尝试编写一个循环遍历每个文件的Perl程序,并生成一个已损坏的文件列表。

我正在使用Compress::Zlib模块,并尝试读取每个文件的前1KB,但由于某些文件在最后被破坏(在手动提取期间验证,仅提醒警报),因此无效到最后)并且首先阅读1KB没有显示问题。我想知道这些文件的CRC检查是否有任何帮助。

问题:

  1. 在这种情况下,CRC验证是否有效?如果是,它是如何工作的?真正的CRC是否会成为gzip头的一部分,我们要将它与我们拥有的文件中的计算CRC进行比较?我如何在Perl中完成此任务?

  2. 还有其他更简单的方法吗?

3 个答案:

答案 0 :(得分:1)

简而言之,检查gzip文件的唯一方法是将其解压缩,直到出现错误或成功结束。但是,您不需要存储解压缩的结果。

存储在gzip文件末尾的CRC是未压缩数据的CRC,而不是压缩数据。要将其用于验证,您必须解压缩所有数据。这是gzip -t执行的操作,解压缩数据和检查CRC,但不存储未压缩的数据。

在结束之前,通常会检测到压缩数据中的损坏。但如果没有,那么CRC,以及对最终存储的未压缩长度的检查,将以非常接近的概率检测到损坏的文件。

答案 1 :(得分:0)

Archive::Zip FAQ给出了一些非常好的指导。

看起来最好的选择是检查每个档案成员的CRC,以及执行此操作的示例程序 - ziptest.pl - 附带Archive::Zip模块安装。

答案 2 :(得分:-1)

只需使用" gunzip -t"就可以很容易地测试文件没有损坏。命令,gunzip也适用于Windows,应该附带gzip包。