2016-05-25 3 views
0

Я использую zlib и C++ для сжатия/распаковки файлов.Как получить исходное расширение файла после INFLATE?

Теперь я могу сфотографировать любой файл и поместить его в .z расширение. Но при раздувании файла .z я должен вручную разместить необходимое расширение. Надувание работает так, как должно, и я могу легко раздувать файл .z в stdout или файл.

Я прочитал zlib manual, но не смог справиться, как решить мою проблему. Полагаю, мне нужно копать заголовок архива для этой информации?

Любая помощь будет оценена, спасибо!

+0

Думаю, вы сбросили оригинальное расширение при сжатии. То есть вам следует сжать в file.ext.z, а не file.z. – Matt

+0

@Matt, правда. Я отрезал оригинальное расширение :) Ваш хак действительно хорош, но есть ли другой способ? – Alexandr

+1

На самом деле это не хак. Подумайте об этих файлах .tar.gz. Zilb не имеет исходного файла fileinfo внутри сжатого потока. Вы должны справиться с этим сами. Unix-way - это tar. Но вы можете выбрать другие варианты, если хотите. – Matt

ответ

2

Библиотека zlib будет сжимать и распаковывать как потоки zlib, так и gzip. В потоках zlib есть очень компактный заголовок и трейлер, не имеющий резервной копии для хранения информации о имени файла. С другой стороны, заголовок gzip и трейлер могут хранить имя файла, которое можно использовать при распаковке. Вы должны прочитать zlib documentation, чтобы узнать, как использовать формат gzip и как обрабатывать заголовок gzip.

Смежные вопросы