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

时间:2015-11-27 18:34:45

标签: c++ compression gzip fopen

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

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

获取 id 后,代码的不同部分使用 fread fseek 等访问该文件。

我想调整我的代码,以便打开该文件的gzip版本,例如“myfile.dat.gz”无需更改太多。

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

有什么建议吗?

谢谢。

PS:如果这种方法提供了解决方案,那么将内存中的整个文件解压缩就可以了。

1 个答案:

答案 0 :(得分:2)

zlib提供fopen()fread()等类似名称gzopen()gzread()等,用于读取和编写gzip文件。如果文件不是gzip压缩的,它将被读取,就像f函数一样。因此,您只需要更改zlib中的函数名称和链接。