gpt4 book ai didi

c++ - 将 gzstream 与压缩文件一起使用时如何保持流位置?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:40 24 4
gpt4 key购买 nike

我必须处理用 gzipped 压缩的大文件。我需要访问部分行,不一定按顺序访问。因此,我想遍历所有文件,同时在我感兴趣的行记录流位置。然后,利用这些流位置快速检索我需要的信息。

为此,我使用 gzstream .但不幸的是,tellg 似乎不适用于此包装器:

#include <iostream>
#include <fstream>
using namespace std;

#include <gzstream.h>

int main (int argc, char ** argv)
{
string inFile;
string line;

system ("rm -f infile1.txt; echo \"toto1\ntoto2\ntoto3\" > infile1.txt");
inFile = "infile1.txt";
ifstream inStream;
inStream.open (inFile.c_str());
cout << inStream.tellg () << endl;
getline (inStream, line);
cout << inStream.tellg () << endl;
inStream.close ();

system ("rm -f infile1.gz; echo \"toto1\ntoto2\ntoto3\" | gzip > infile1.gz");
inFile = "infile1.gz";
igzstream igzStream;
igzStream.open (inFile.c_str());
cout << igzStream.tellg () << endl;
getline (igzStream, line);
cout << igzStream.tellg () << endl;
igzStream.close ();

return 0;
}

此代码返回:

$ gcc -Wall test.cpp -lstdc++ -lgzstream -lz
$ ./a.out
0
6
18446744073709551615
18446744073709551615

有没有办法使它与 igzstream 一起工作?或者我应该使用 Boost gzip filters反而?任何代码片段将不胜感激;)

最佳答案

gzstream 不支持在文件中查找,无论如何这在 gzip 文件中不是特别有效的操作。你可以看看这个问题及其答案:Random access gzip stream

其中一个答案提供了指向 zlib 源代码示例代码的链接,您可以使用它来帮助您在 gzstream 中实现您想要的功能。另一个答案提出了一种变体压缩格式,它确实支持更有效地查找。

Boost iostream 可能支持搜索,但 gzstream 更易于使用和修改,因此我倾向于坚持使用它。

关于c++ - 将 gzstream 与压缩文件一起使用时如何保持流位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7920293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com