Мне удалось интегрировать повышающие API Iostream для чтения сжатых файлов. Я следил за документацией на странице повышения и имел следующий код so- far:
std::stringstream outStr;
ifstream file("file.gz", ios_base::in | ios_base::binary);
try {
boost::iostreams::filtering_istreambuf in;
in.push(boost::iostreams::gzip_decompressor());
in.push(file);
boost::iostreams::copy(in, outStr);
}
catch(const boost::iostreams::gzip_error& exception) {
int error = exception.error();
if (error == boost::iostreams::gzip::zlib_error) {
//check for all error code
}
}
Код работает нормально (поэтому, пожалуйста, игнорируйте любые опечатки и ошибки выше:)).
- Похоже, что приведенный выше код будет читать полный файл и хранить его в памяти при создании filtering_istreambuf. Это правда, из моего расследования это выглядит так для меня? Если файл считывается в память, этот код может быть проблемой для больших файлов (что я и имею в виду).
- Мой текущий код читает gzipped с помощью gzgets API из zlib по строкам. Есть ли способ сделать чтение строк за строкой, используя расширенные API?