boost :: filtering_streambuf с помощью gzip_decompressor (), как получить доступ построчно из файла - PullRequest
8 голосов
/ 28 марта 2011

Я написал приложение 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?

Усиление decumentation мне не сильно помогло с этим.

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

1 Ответ

10 голосов
/ 29 марта 2011

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

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