如何检查文件是否是gzip压缩的?

时间:2011-05-19 13:19:49

标签: c++ c file-io gzip zlib

我有一个C / C ++程序需要读取一个文件,该文件可能是也可能不是gzip压缩的。我知道我们可以使用zlib中的gzread()读取压缩文件和未压缩文件 - 但是,如果文件是gzip压缩的,我只想使用zlib函数(出于性能原因)。

那么有没有办法以编程方式检测或检查某个文件是否是从C / C ++中删除的?

4 个答案:

答案 0 :(得分:48)

文件开头有一个幻数。只需读取前两个字节并检查它们是否等于0x1f8b

答案 1 :(得分:8)

你是否更喜欢误报,漏报,或者根本没有错误的结果(表现不佳......)

RFC 1952: GZIP file format specification version 4.3表示文件的前2个字节(每个成员,因此)'\x1F''\x8B'。将其用于可能导致误报的第一次检查。

答案 2 :(得分:3)

使用gzread()读取压缩文件和未压缩文件之间的性能差异是什么?

无论如何,为了检测文件是否被gzip压缩,您可以根据链接阅读文件开头的magic number1f 8b

答案 3 :(得分:1)

您可以测试RFC 1951和1952中描述的签名以获得一个想法。对于GZIP文件,第二个是相关的,它是确定的。其他格式存在一些误报,因此您应该检查标题的合理值。

对于zlib流而言,它更难,因为它们更容易出现误报。但你很少会在自己的野外遇到那些。

相关问题