Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
В дельфи написал: 12.05.11 10:31 Число просмотров: 2678
Автор: Ustin <Ustin> Статус: Elderman Отредактировано 12.05.11 10:36 Количество правок: 2
|
uses zlib;
...
procedure ubzlib(srcfn:string);
...
begin
s:=FileToString(srcfn);
s:=substr(s,1,length(s)-4);
src:=TStringStream.Create(s);
dest:=TFileStream.Create(srcfn+'.dc',fmCreate);
t:=TDecompressionStream.Create(src);
repeat
bytesread:=t.Read(mainbuffer,1024);
dest.Write(mainbuffer,bytesread);
until bytesread<1024;
t.free;
src.free;
dest.free;
end;
...
При наличии и отсутствии жирной строки всё распаковывалось без ошибок (результат правильный, исключений не вызывает).
|
<programming>
|
deflated payload -> gzip 11.05.11 06:34
Автор: developertmp Статус: Незарегистрированный пользователь
|
Есть deflated payload архива (без header & footer ). Извесна также длина inflated файла.
Как праильно добавить header/footer чтобы получить welformed gzip? Какую либу использовать, чтобы разархивировать затем? minizip ? zlib?
Понятно, что надо смотреть спек... Но может есть идеи которые бы ускорили дело?
|
|
Если я правильно понял, 11.05.11 12:41
Автор: Ustin <Ustin> Статус: Elderman
|
zlib->gzip
|
| |
Не совсем то, но всё равно спасибо. 12.05.11 05:31
Автор: developertmp Статус: Незарегистрированный пользователь Отредактировано 12.05.11 05:32 Количество правок: 1
|
Не совсем то, но всё равно спасибо.
Задача немного другая. У меня есть кусок сжатого gzip - это не полноценный gzip. Отличие от нормального gzip - у этого файла нет заголовка (10 байт) и футера (8 байт). Заголовок несложно прикрутить. А вот футер невозможно, поскольку он содержит CRC подсчитанный по исходному (не сжатому) файлу. Если прикрутить пустой футер, то например 7Z разархивирует файл, но при этом обругется на CRC.
Мне надо это сделать программно, то есть разархивировать файл без хедера и футера. В ZLIB есть такая фунция InflateBack. Но уж сильно мудрено её использование. Нет ли нормального примера?
|
| | |
В дельфи написал: 12.05.11 10:31
Автор: Ustin <Ustin> Статус: Elderman Отредактировано 12.05.11 10:36 Количество правок: 2
|
uses zlib;
...
procedure ubzlib(srcfn:string);
...
begin
s:=FileToString(srcfn);
s:=substr(s,1,length(s)-4);
src:=TStringStream.Create(s);
dest:=TFileStream.Create(srcfn+'.dc',fmCreate);
t:=TDecompressionStream.Create(src);
repeat
bytesread:=t.Read(mainbuffer,1024);
dest.Write(mainbuffer,bytesread);
until bytesread<1024;
t.free;
src.free;
dest.free;
end;
...
При наличии и отсутствии жирной строки всё распаковывалось без ошибок (результат правильный, исключений не вызывает).
|
| | | |
Проверил вариант с InflateBack 16.05.11 18:58
Автор: developertmp Статус: Незарегистрированный пользователь Отредактировано 16.05.11 18:58 Количество правок: 1
|
Проверил вариант с InflateBack из ZLIB - работает.
ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
in_func in, void FAR *in_desc,
out_func out, void FAR *out_desc));
---
Странные вещи оказались с инициализацией
ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
unsigned char FAR *window));
---
Оказалось, что только одно значение разме буфера (int windowBits = 15) работает - а именно 32К.
Это нигде не документировано.
|
|
|