Имея stringstream с некоторыми данными, как сжать его кросс-платформенным способом? - PullRequest
2 голосов
/ 21 апреля 2011

Итак, у нас есть поток строк с некоторыми данными.С помощью какой кроссплатформенной библиотеки мы можем преобразовать ее содержимое в формат gziped (вы бы сохранили его в файле с расширением .tar.gz)

Давайте перейдем к коду: так у меня есть:

          stringstream body;
          body << std::ifstream( path.string().c_str(), ios::binary).rdbuf();

Что включает в себя добавление, какую функцию я должен вызывать для кодирования потока строк, и какую функцию вызывать для поворота, чтобы поместить эти закодированные данные в поток строк?

Кстати: есть ли какая-нибудь библиотека буста, которая может кодировать в gzip

Ответы [ 2 ]

6 голосов
/ 21 апреля 2011

boost . iostreams имеет дополнительную встроенную поддержку bzip2 и gzip сжатие / распаковка.

1 голос
/ 21 апреля 2011

Не очень понятно, о чем вы спрашиваете. Если вы имеете в виду, что файл (указанный path) в формате gzip, самый простой Решение, вероятно, состоит в том, чтобы определить входной поток канала и прочитать его от gunzip < file через это. Если вы хотите распаковать его в вашем приложении какая-то фильтрация входного потока Казалось бы в порядке (см. boost :: iostream).

И я бы не стал использовать временную std::ifstream в любом случае: вы Прежде чем пытаться читать, убедитесь, что открытие успешно завершилось.

...