逐行读取压缩文件的输入数据

read input data gzipped file line by line

本文关键字:输入 数据 文件 读取 压缩 逐行      更新时间:2023-10-16

我知道有些人已经写过这个问题;但是,这个问题我还不太清楚。我需要读取包含未格式化数据的压缩文件。我没有成功地尝试从zlib和gzstream网站的说明。有没有人可以为我提供一个快速的例子,如何使用ifstream直接从压缩的gzip文件中提取数据?我使用数据文件的步骤如下:

#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

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

将"ifstream"替换为"igzstream"

.

一种令人厌恶的方法是在输入文件上执行gzip -c,并使用popen(3)之类的东西从gzip(1)进程读取标准输出。它将尽可能少地解压缩以满足进程的读请求。但是它确实需要在系统上安装gzip(1),这不是理想的,但对于您的应用程序来说可能是一个合适的权衡。

也许你的应用程序应该捆绑自己的gzip(1)副本?请注意,zlib和其他所有东西一样存在安全漏洞,当zlib出现一个安全问题时,当用户需要更新一打不同的应用程序时,他们不会感到惊讶。

你也可以自己编写代码来递增地解密输入的部分,并用解密的数据填充你的c++流对象。这种方法会增加工作量,但不会依赖于在进程之间复制数据,因此它可能运行得更快,并且可能比依赖系统提供的gzip(1)可执行文件更安全。