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

Dee*_*ash 28 c c++ file-io gzip zlib

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

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

Bru*_*hée 51

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

  • 注意字节顺序和字节宽度.比较单个值而不是复合:`(byte1 == 0x1f)&&(byte2 == 0x8b)`与`first2bytes == 0x1f8b`. (34认同)

pmg*_*pmg 9

你是否更喜欢误报,漏报,或者根本没有错误的结果(表现得很糟糕......)?

RFC 1952:GZIP文件格式规范版本4.3的状态的文件的前2个字节(各部件的且因此)是'\x1F''\x8B'.将其用于可能导致误报的第一次检查.