Повысить iostreams принять подпоток - PullRequest
0 голосов
/ 02 ноября 2018

Я следовал этому примеру о том, как распаковать файл bzip2:

#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/bzip2.hpp>

int main()
{
    using namespace std;
    using namespace boost::iostreams;

    ifstream file("hello.bz2", ios_base::in | ios_base::binary);
    filtering_streambuf<input> in;
    in.push(bzip2_decompressor());
    in.push(file);
    boost::iostreams::copy(in, cout);
}

Предположим, у меня большой текстовый файл в формате bz2. Можно ли создать подпоток из in, который начинается со второй строки и заканчивается непосредственно перед последней строкой? Или просто копирует данный размер в cout? Рассмотрим файл примера, созданный

echo -e "First\nSecond\nThird\nForth" | bzip2 > hello.bz2

возможно ли скопировать только вторую и третью строку в cout, не считывая весь несжатый файл в буфер? Я попытался boost::iostreams::restrict, но потом получил no random access: iostream error.

...