2011-03-28 13 views
6

Escribí una aplicación Logparser y ahora quiero implementar la descompresión de archivos .gz. Lo intenté con boost :: iostreams y zlib, que parece funcionar, pero no sé cómo manejar la entrada que obtengo de los archivos comprimidos.boost :: filtering_streambuf con gzip_decompressor(), cómo acceder línea por línea desde el archivo

Esto es lo que hago:

input.open(p.source_at(i).c_str(), ios_base::in | ios_base::binary); 
boost::iostreams::filtering_streambuf<boost::iostreams::input> in; 
in.push(boost::iostreams::gzip_decompressor()); 
in.push(input); 
boost::iostreams::copy(in, cout); 

Este código se ejecuta, si mi SourceFile tiene el .gz fin. La última línea genera la secuencia de archivos descomprimida correctamente para cout.

Pero, ¿cómo puedo obtener línea por línea del archivo descomprimido? Mi programa usa getline (entrada, transferencia) para leer líneas de la secuencia de entrada, si no está comprimida.

Ahora quiero leer del archivo descomprimido de la misma manera, pero ¿cómo puedo obtener una nueva línea?

La incineración de impulso no me ayudó mucho con esto.

¡Gracias de antemano!

Respuesta

8

Ok Lo encontré. Solo tuve que crear un std :: istream y pasar una referencia al buffer:

std::istream incoming(&in); 
getline(incoming, transfer); 
Cuestiones relacionadas