Настройка std::ofstream для zip-файла в архиве

Я хотел бы записать некоторые файлы непосредственно в файл zip-архива (а не создавать их сначала в какой-то папке и копировать в архив на втором этапе). Поэтому мне интересно, есть ли возможность настроить поток так, чтобы он указывал непосредственно на файл внутри архива.

например, скажем, у меня есть архив в /tmp с именем data.zip, а внутри него есть файл data1.log

могу ли я сделать что-то вроде:

std::ofstream ostr("/tmp/data.zip/data1.log", std::ios::binary);

и начать передавать данные с помощью оператора «‹‹»?

Благодарность,


person Zohar81    schedule 18.05.2016    source источник
comment
Нет, это невозможно в стандартном С++, вам нужна поддержка какой-то внешней библиотеки для обработки ZIP-архивов.   -  person Some programmer dude    schedule 18.05.2016
comment
Вам нужно будет написать свои собственные функции (например, оболочку std::streambuf) поверх библиотек lzma или 7z.   -  person πάντα ῥεῖ    schedule 18.05.2016
comment
FWIW, я знаю, что библиотека ZipLib способна передавать поток в отдельный файл.   -  person chris    schedule 18.05.2016


Ответы (1)


могу ли я сделать что-то вроде:

std::ofstream ostr("/tmp/data.zip/data1.log", std::ios::binary);

и начать передавать данные с помощью оператора «‹‹»?

Нет, это невозможно.
Также обратите внимание, что оператор std::ostream& operator<<(std::ostream&,const T&) явно зарезервирован для вывода в текстовом формате, а не для записи двоичных данных.

Для этого вам потребуется реализация std::streambuf, которая упаковывает входящие данные символов в файл, который (наконец-то?) сжат и добавлен в архив.

Стандартная библиотека C++ не знает, как волшебным образом взаимодействовать с двоичными .zip файлами.

Кроме того, что вы имеете в виду под "начать отправку данных"? Архив .zip также содержит информацию об определенных именах сжатых файлов и их относительных путях.

Как бы вы взаимодействовали с интерфейсом std::ofstream, чтобы указать, какие данные файла добавлять на самом деле?


Вам следует изучить оболочки C++ для библиотеки LZMA/7zip, которые позволяют контролировать добавление файлов в архивы. .

person πάντα ῥεῖ    schedule 18.05.2016