Frage

Wie können wir lesen / schreiben gzip-Dateien in C ++?

Die iostream Wrapper-Klassen hier gut aussehen, und hier ist ein einfaches Anwendungsbeispiel:

gz::igzstream in(filename);
std::string line;
while(std::getline(in, line)){
  std::cout << line << std::endl;
}

Aber ich war nicht in der Lage, um es tatsächlich zu verknüpfen (obwohl ich ein /usr/lib/libz.a haben). Ein einfaches

g++ test-gzstream.cpp -lz

tat es nicht (undefined reference to gz::gzstreambase::~gzstreambase()).

War es hilfreich?

Lösung

Selbstverständlich können Sie die CPP-Datei benötigen, wo der gzstreambase destructor auch definiert, dh

Andere Tipps

Um mehr Details als das, was von den anderen Nutzern kurz erwähnt wurde, ist hier, wie ich mit gzstream auf meinem Computer arbeiten, verwaltet werden.

Als erstes habe ich heruntergeladen gzstream und installiert es in meinem Haus (die beiden letzten Zeilen können zu Ihrem ~/.bash_profile hinzugefügt werden):

cd ~/src
mkdir GZSTREAM
cd GZSTREAM/
wget http://www.cs.unc.edu/Research/compgeom/gzstream/gzstream.tgz
tar xzvf gzstream.tgz
cd gzstream
make
export CPLUS_INCLUDE_PATH=$HOME/src/GZSTREAM/gzstream
export LIBRARY_PATH=$HOME/src/GZSTREAM/gzstream

Dann habe ich getestet, um die Installation:

make test
...
# *** O.K. Test finished successfully. ***

Schließlich schrieb ich ein Dummy-Programm zu überprüfen, dass ich effektiv die Bibliothek verwenden:

cd ~/temp
vim test.cpp

Hier ist der Code (sehr minimalistisch, sollte viel für reale Anwendungen verbessert werden!):

#include <iostream>
#include <string>
#include <gzstream.h>
using namespace std;

int main (int argc, char ** argv)
{
  cout << "START" << endl;

  igzstream in(argv[1]);
  string line;
  while (getline(in, line))
  {
    cout << line << endl;
  }

  cout << "END" << endl;
}

Hier ist, wie ich es kompiliert:

gcc -Wall test.cpp -lstdc++ -lgzstream -lz

Und last but not least, hier ist, wie ich es benutzt:

ls ~/ | gzip > input.gz
./a.out input.gz
START
bin/
src/
temp/
work/
END

Ich hatte dieses Problem auch mit altem GCC Compiler. Ich reparierte gerade dies durch eine Header-Version von gzstream machen, die leichter sein sollte, zu verwenden.

https://gist.github.com/1508048

Dies ist von der "Gzstream Bibliothek Home Page"

  

So oder kompilieren gzstream.C von Hand,   legen Sie sie in irgendeiner Bibliothek und Umzug   gzstream.h in die Suche einbeziehen   Pfad Ihres Compilers. Oder verwenden Sie die   vorgesehen Makefile, passen ihre   Variablen, und folgen Sie den Ausführungen in   das Makefile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top