LINUX.ORG.RU

[C] Распаковка файла с помощью zlib

 


0

0

Задача: есть файл сжатый с помощью zlib, нужно его распаковать в память, т.к. будет последующая обработка данных.

Проблема в том, что я не знаю, как корректно выделить память под распакованный файл.

Читая мануал, наткнулся на такое:

int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.)

В моем же случае ждина распакованного файла неизвестна.

Можно также делать с помощью более низкоуровневых функций, но они отдают распакованный файл кусками, количество которых, естественно, тоже заранее неизвестно.

Что делать в этом случае? Я с си только начинаю общаться, так что такие вещи откровенно в тупик ставят.


Посмотри в исходниках чьих нибудь

Legioner ★★★★★
()

> В моем же случае ждина распакованного файла неизвестна.

В качестве длины буфера передайте 0, в ответ получите нужный размер буфера.

andreyu ★★★★★
()

как вариант - вызывать в цикле, в случае возникновения Z_BUF_ERROR добавлять память при помощи realloc()

ananas ★★★★★
()

Тебе вообщем-то и не нужно знать количество кусков -- запусти цикл, в котором выделяй память под конкретный кусок (фиксированного размера), вызывай inflate и так пока не вернётся Z_STREAM_END (ну или ошибка). Куски можно держать в связанном цикле.

zim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.