逐行读取输入数据gzipped文件

时间:2011-10-16 01:35:12

标签: c++

我认识到有些人已经写过这个问题;但是,这个问题我还不清楚。我需要读取包含未格式化数据的gzip压缩文件。我没有尝试过遵循zlib和gzstream网站的说明。有人能为我提供一个如何使用ifstream直接从压缩的gzip文件中提取数据的快速示例吗?我使用dat文件的过程如下:

#include <iostream>
#include <sstream>
#include <string>

int main () {
    ifstream file;
    string stringtemp;
    stringstream line2convert;
    file.open("directory/file.dat");
    // read each line using a for loop (I know the total number of lines)
    file.getline (line,100);
    // extract information line by line using stringstreams
    line2convert  << line;
    line2convert >> int2convert;   
    ...
    ...
    ...
} 

任何人都可以给我一些提示,添加我需要的几行?

谢谢!   - F

2 个答案:

答案 0 :(得分:2)

如果你知道如何在gzstream中链接,你可以这样做

只需将“ifstream”替换为“igzstream”

答案 1 :(得分:0)

执行此操作的恶意方法是在输入文件上执行gzip -c,并使用gzip(1)之类的内容读取popen(3)进程的标准输出。它会尽可能少地解压缩以填充进程的读取请求。但它确实需要在系统上安装gzip(1),这不是理想的,但可能适合您的应用程序。

也许你的应用程序应该捆绑自己的gzip(1)副本?请注意zlib has security flaws like everything else,当zlib中存在一个安全问题时,如果有十几个不同的应用程序需要更新,则用户不会留下深刻印象。

您还可以编写代码以自行逐步解密部分输入,并使用解密数据填充C ++流对象。这条路线工作量更大,但不依赖于在进程之间复制数据,因此它可能运行得更快,并且可能不如依赖系统提供的gzip(1)可执行文件那么脆弱。