如何在 C++ 中使用 fopen(或与 fopen 具有相同 return 值的函数)打开 gzip 文件?

How to open a gzip file using fopen (or a function with the same return value as fopen) in C++?

我目前有一些代码读取未压缩的文件,它使用以下方法在C++中读取文件

FILE* id = fopen("myfile.dat", "r");

获得id后,代码的不同部分使用freadfseek[=29=访问文件],等等

我想修改我的代码以便打开文件的 gzip 版本,例如"myfile.dat.gz"不需要改变太多。

理想情况下,我会为 fopen 实现一个包装器,称之为 fopen2,它可以读取 myfile.dat 和 myfile.dat.gz,即它应该 return 一个指向 FILE 对象的指针, 这样剩下的代码就不用改了。

有什么建议吗?

谢谢。

PS:如果这个方法能解决的话,把整个文件解压到内存就好了

zlib 提供 fopen()fread() 等的类似物,称为 gzopen()gzread() 等,用于读取和写入 gzip 文件。如果文件不是 gzip 压缩的,它将像 f 函数一样被读取。所以你只需要在 zlib.

中更改函数名称和 link