Ik heb te maken met grote bestanden gecomprimeerd met gzipped. Ik moet een subset van de regels openen, niet noodzakelijk in de juiste volgorde. Dus zat ik te denken om alle bestanden een keer door te nemen terwijl ik de stroompositie vastlegde op de lijnen waar ik in geïnteresseerd ben. En dan, om deze stroomposities te gebruiken om snel de informatie op te halen die ik nodig heb.
Hiervoor gebruik ik gzstream . Maar helaas lijkt tellg
niet te werken met deze wrapper:
#include
#include
using namespace std;
#include
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;
}
Deze code geeft dit als resultaat:
$ gcc -Wall test.cpp -lstdc++ -lgzstream -lz
$ ./a.out
0
6
18446744073709551615
18446744073709551615
Is er een manier om dit met igzstream te laten werken? Of moet ik Gzip-filters verbeteren gebruiken in plaats daarvan? Elk codefragment wordt zeer op prijs gesteld;)