我认识到有些人已经写过这个问题;但是,这个问题我还不清楚。我需要读取包含未格式化数据的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
答案 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)
可执行文件那么脆弱。