работа с Zlib
От: duncanmclaud  
Дата: 30.11.09 12:39
Оценка:
Добрый день.
Есть вопрос по работе с библиотекой Zlib!

Если просто есть зажатый файл, то я его распаковываю вот так —

Bytef *gz_getbuffercompress(gzFile file,unsigned long *size)
{
Bytef *buffer;
unsigned long res = 0;
int read_byte = 0;
int size_level = 1;

buffer = (Bytef*) malloc(sizeof(Bytef) * GZ_MIN_BUFFER);

try
{
gzseek(file, 0L, SEEK_CUR);

while( (read_byte = gzgetc(file)) != -1)
{
*(buffer++) = read_byte;
++res;

if(res >= (unsigned long)(GZ_MIN_BUFFER * size_level))
{
buffer -= res;
++size_level;
buffer = (Bytef*) realloc(buffer,(GZ_MIN_BUFFER * size_level) );
buffer += res;
}
}
buffer -= res;
}
catch(...)
{
}

*size = res;
return buffer;
}

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

Спасибо за ответ.
Re: работа с Zlib
От: Аноним  
Дата: 30.11.09 12:54
Оценка:
Здравствуйте, duncanmclaud, Вы писали:

D>Добрый день.

D>Есть вопрос по работе с библиотекой Zlib!

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


если архив .tar.gz, то для начала можно посмотреть сюда: http://en.wikipedia.org/wiki/Tar_(file_format)
afair, zlib это только сжатие потока данных, а не архивация файлов как в winzip или winrar.
Re[2]: работа с Zlib
От: Alexander G Украина  
Дата: 30.11.09 13:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>afair, zlib это только сжатие потока данных, а не архивация файлов как в winzip или winrar.


Вообще zlib сжатие используется и как самый распространённый способ сжатия в zip архивах.
Русский военный корабль идёт ко дну!
Re[2]: работа с Zlib
От: duncanmclaud  
Дата: 30.11.09 13:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, duncanmclaud, Вы писали:


D>>Добрый день.

D>>Есть вопрос по работе с библиотекой Zlib!

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


А>если архив .tar.gz, то для начала можно посмотреть сюда: http://en.wikipedia.org/wiki/Tar_(file_format)

А>afair, zlib это только сжатие потока данных, а не архивация файлов как в winzip или winrar.


ага, понял, то есть по формату tar вычитываю все названия файлов, смещения, размеры, а потом просто по определенным смещениям для каждого файла вычитываю данные, и с помощью zlib уже распаковываю для каждого файла данные.

Спасибо!
Re[3]: работа с Zlib
От: Mr.Cat  
Дата: 30.11.09 13:16
Оценка:
Здравствуйте, duncanmclaud, Вы писали:
D>ага, понял, то есть по формату tar вычитываю все названия файлов, смещения, размеры, а потом просто по определенным смещениям для каждого файла вычитываю данные, и с помощью zlib уже распаковываю для каждого файла данные.
Обычно наоборот. Сперва файлы склеиваются таром, потом гзипуются. Т.е. если у тебя tar.gz — сперва распаковываешь весь архив, потом парсишь его как тар.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.