1) Да, приведенный выше код copy()
поместит весь файл в буфер строк outStr
. Согласно описанию копии
Копия шаблона функции считывает данные из заданной модели Source и записывает их в заданную модель Sink, пока не будет достигнут конец потока.
2) переключиться с filtering_istreambuf
на filtering_istream
и std :: getline () будет работать:
#include <iostream>
#include <fstream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
int main()
{
std::ifstream file("file.gz", std::ios_base::in | std::ios_base::binary);
try {
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::gzip_decompressor());
in.push(file);
for(std::string str; std::getline(in, str); )
{
std::cout << "Processed line " << str << '\n';
}
}
catch(const boost::iostreams::gzip_error& e) {
std::cout << e.what() << '\n';
}
}
(вы можете std::cout << file.tellg() << '\n';
в этом цикле, если вам нужны доказательства. Он увеличится в значительных кусках, но не будет равен длине файла с самого начала)