boost :: filtering_streambuf с gzip_decompressor (), как построчно получить доступ из файла

Я написал приложение Logparser и теперь хочу реализовать распаковку файлов .gz. Я пробовал использовать boost :: iostreams и zlib, которые, кажется, работают, но я не знаю, как обрабатывать ввод, который я получаю из сжатых файлов.

Вот что я делаю:

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);

Этот код запускается, если мой исходный файл имеет окончание .gz. Последняя строка правильно выводит распакованный файловый поток в cout.

Но как я могу построчно извлекать из распакованного файла? Моя программа использует getline (ввод, передача) для чтения строк из входного потока, если он не сжат.

Теперь я хочу таким же образом читать из распакованного файла, но как мне получить новую строку из in?

Снижение буста мне в этом не сильно помогло.

Заранее спасибо!


person Daniel Stefanovski    schedule 28.03.2011    source источник


Ответы (1)


Хорошо, я узнал это. Мне просто нужно было создать std :: istream и передать ссылку на буфер:

std::istream incoming(&in);
getline(incoming, transfer);
person Daniel Stefanovski    schedule 28.03.2011