繁体   English   中英

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

[英]How to check if a file is gzip compressed?

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

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

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

你更喜欢误报、漏报还是根本没有错误结果(性能会下降......)?

RFC 1952: GZIP 文件格式规范版本 4.3规定文件的前 2 个字节(每个成员的)是'\\x1F''\\x8B' 将其用于可能导致误报的第一次检查。

使用 gzread() 读取压缩文件和未压缩文件的性能有何不同?

无论如何,为了检测文件是否被gzip,您可以读取文件开头的幻数,根据链接是1f 8b

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

对于 zlib 流来说有点困难,因为它们更容易出现误报。 但是你很少会遇到那些在野外独自生活的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM