Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.004 c
15-1279010786
Артур Д.
2010-07-13 12:46
2010.10.17
Опыт работы с фрилансерами


3-1246602645
Rule
2009-07-03 10:30
2010.10.17
Ms SQL server через ADO-Native Client простой селект


2-1280119066
Spot
2010-07-26 08:37
2010.10.17
Ошибка в Locate


2-1280199324
Ш-К
2010-07-27 06:55
2010.10.17
Как отобразить на канве фрагмент метафайла?


10-1166096876
Styx_
2006-12-14 14:47
2010.10.17
TWebBrowser и JavaScript





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский