Форум: "Прочее";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
ВнизUnzip компонент Найти похожие ветки
← →
Кто б сомневался © (2010-07-11 20:22) [0]Подскажите компонент или класс для распаковки zip файлов.
Требования : поблочная распаковка в память. - Нужно распаковывать первые 2-5 кб, не весь файл.
Если таких нету, то можно и весь файл.
← →
xayam © (2010-07-12 00:43) [1]Где-то здесь http://koders.com/delphi/fid6A345DB2B8B8E9ACA5F6F8E23A4E4C4DDAAF4179.aspx?s=zip (function Wiz_UnzipToMemory)
Не?
← →
xayam © (2010-07-12 01:25) [2]ZLib еще оказывается начиная с 7-й delphi есть
http://k210.org/delphi/main/4/
← →
antonn © (2010-07-12 09:20) [3]ZipTV, но слегка платная :)
← →
Кто б сомневался © (2010-07-12 15:42) [4]
> ZLib еще оказывается начиная с 7-й delphi есть
Zlib не работет с zip архивами, я вчера читал как раз.
Can zlib handle .zip archives?
Not by itself, no. See the directory contrib/minizip in the zlib distribution.
← →
xayam © (2010-07-12 23:19) [5]
> Zlib не работет с zip архивами
в примере по ссылке [2] судя по коду работает:
if OpenDialog1.Execute then CompressFile(OD.FileName,"C:\test.zip")
← →
Кто б сомневался © (2010-07-14 15:02) [6]
> xayam © (12.07.10 23:19) [5]
Надо посмотреть. Спасибо за ссылки.
Есть еще кстати ZipForge - хороший компонент, я б его и выбрал, но идет целиком в dcu (все в одно модуле) - из за чего в прогу зашьется и компрессор, а это лишние 200 кб. Для меня это важно, т.к. пишу плагин, для Total commander
← →
Anatoly Podgoretsky © (2010-07-14 16:28) [7]> Кто б сомневался (14.07.2010 15:02:06) [6]
А у тебя, что с диском проблемы, тогда тебя эти 200 к не спасут.
← →
Кто б сомневался © (2010-07-14 17:07) [8]
>
> в примере по ссылке [2] судя по коду работает:
>
> if OpenDialog1.Execute then CompressFile(OD.FileName,"C:
> \test.zip")
Не работает, судя по всему zip - это контейнер, а zlib - алгоритм .
Здесь DRON написал что это можно сделать при помощи minizip, но на delphi там нет исходников для minizip.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=58273
← →
Кто б сомневался © (2010-07-14 21:02) [9]Вобщем я нашел исходники ZipForge - оказывает они основаны на Zlib. Закомментил все что не нужно, в итоге декомпрессор занимает 71 кб.
← →
Кто б сомневался © (2010-07-15 23:31) [10]Вобщем, поддерживает zlib декомпрессию zip . Правда нужно подавать ему сами данные, без заголовка. я что то поздно до этого дошел, потратив полтора дня на перелопачивание исходников ZIPForge . нужно сделать вот что, из файла Tstream:
1. Прочитать заголовок
TZFZipFileHeader = packed record
signature: longword;
extractVersion: word;
genPurposeFlag: word;
compMethod: word;
lastModTime: word;
lastModDate: word;
crc32: longword;
compSize: longword;
unCompSize: longword;
nameLength: word;
extraLength: word;
end;
2. FStream.Seek(LFHeader.nameLength + LFHeader.extraLength, soFromCurrent);
3.Закинуть два байта в начало in буфера
vStreamHeader := $0178;
Move(vStreamHeader, InBuffer[0], 2);
Прочитать данные из файла (FStream), с текущей позиции (см. 1 и 2) в InBuffer .
4.
FZStream.next_out := vOutBuf;
FZStream.avail_out := размер out
FZStream.next_in := InBuffer
FZStream.avail_in - размер in
5. InflateInit(FZStream)
inflate(FZStream, Z_NO_FLUSH)
inflateEnd(FZStream)
Все.
ZipForge не используйте, жутко не оптимизированный код. Не профессиональный. Буферы большого размера по 8-12 мб, причем перекидываются с одного места, в другое без смысла - выделяют слишком много памяти, по три буфера, вместо одного. По 2 -3 раза открывают и читают файл.
чего стоит ExtracttoBuf - читают весь файл ,а потом уже со стрима, копируют кусочек в буфер.
← →
Кто б сомневался © (2010-07-16 00:37) [11]Еще, добавлю, просто эту инфу хрен где найдешь.
Значит чтобы работать с Zlib нужно -
1. Zlib.pas - последняя версия лежит в сурсах Delphi (в любой старше 5)
2. Исходники качаются на сайте zlib.net (если поискать, то можно найти уже откомпиленные). В Delphi работаем с obj файлами, zlib - там весь экспорт.
расписан.
3. Итак скачали исходники, заходим в папку и создаем батник с таким содержимым :
bcc32 -c -6 -O2 -Ve -X -pr -a8 -b -d -k- -vi -tWM -r -RT- -ff *.c
pause
4. Для того чтобы он работал, надо установить Builder C++ . Жмем на батник и полученные obj файлы забираем.
все, присоединяем Zlib и работаем как написал я выше.
← →
antonn © (2010-07-16 00:52) [12]а у меня есть и obj и pas (TREES.PAS/inftrees.pas/inffast.pas/infblock.pas/adler32.pas и тп) :Р
← →
Кто б сомневался © (2010-07-16 00:57) [13]
> antonn © (16.07.10 00:52) [12]
У меня тоже есть, но они уже давно не поддерживаются автором который их портировал. Последняя 1997.
А оригиналы, автор писал на С (Mark Adler), он их до сих пор поддерживает, последняя версия 2010 года. Я думаю там и фиксы, и оптимизация итп.
← →
Кто б сомневался © (2010-07-16 00:58) [14]А порт на pas писал Allen Cheng. Тем более он писал их на паскале.
← →
Кто б сомневался © (2010-07-16 00:59) [15]>>Тем более он писал их на паскале.
Судя по всему.
А не на Delphi
← →
Кто б сомневался © (2010-07-16 01:13) [16]
> А не на Delphi
Там может быть ограничение на размер буфера итп. Не больше 64 кб.
Хотя может быть попробую и то и другое заюзать, мне точно не нужно больше 64 кб. Сравню скорости.
Pascal tranlastion
Copyright (C) 1998 by Jacques Nomssi Nzali
← →
sniknik © (2010-07-16 01:47) [17]http://www.base2ti.com/?id=delphi.zlib
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c