Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.17;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
2-1280136272
Jacksotnik
2010-07-26 13:24
2010.10.17
Помогите с SELECT INTO OUTFILE


2-1279611355
beginner
2010-07-20 11:35
2010.10.17
Как разернуть окно на весь экран?


15-1279275192
Максим
2010-07-16 14:13
2010.10.17
Не удается подключиться к интернету


15-1279144743
Димон
2010-07-15 01:59
2010.10.17
Как передать файл на телефон по блютуз?


9-1186710531
AlexanderMS
2007-08-10 05:48
2010.10.17
Проверить, принадлежит ли точка прямоугольнику