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

Вниз

Как распаковать Zip из строки в строку.   Найти похожие ветки 

 
w666w   (2006-12-01 17:51) [0]

Уважаемые мастера. Подскажите, как распаковать Zip из строки в строку без промежуточной работы с файлами? Долго бьюсь над этим вопросом и не нашел решения.

Заранее спасибо за помощь!


 
Virgo_Style ©   (2006-12-02 07:49) [1]

Не то что бы я долго бился над этим вопросом, но что, собственно, нужно - понять не смог.
Полагаю, тебе нужен либо компонент/библиотека, реализующие работу с zip в памяти, либо писать свою реализацию того же самого.


 
w666w   (2006-12-03 20:27) [2]

Да, именно работа с zip в памяти, без использования промежуточных файлов (без обращения в винту вообще). Нито не встречал такую либу (бесплатную) ?

Может быть есть способ доработать какой-либо существующий компонент для такой работы? В каком направлении копать?


 
Юрий Зотов ©   (2006-12-03 20:44) [3]

Именно ZIP? Если устроит ZLib, то он есть в Delphi. Пакует и распаковывает из потока в поток.


 
w666w   (2006-12-04 00:04) [4]

С Zlib голову сломишь напрочь. Суть проблемы: web сервер создает архив zip содержащий 1 текстовый файл. Необходимо распаковать этот архив, полученный через HTTP и делать разбор этого файла... Есть ПРОСТЫЕ и понятные методы, не требующие изучения ZLib API?


 
ORMADA ©   (2006-12-04 06:48) [5]

не знаю чё там с злибом мучаешь
просто довольно там

procedure PackStream(var OutMemoryStream: TMemoryStream);
var
 UnknownPtr: pointer;
 NewSize: integer;
begin
 OutMemoryStream.Position := 0;
 try
   CompressBuf(OutMemoryStream.Memory, OutMemoryStream.Size, UnknownPtr, NewSize);
   OutMemoryStream.Clear;
   OutMemoryStream.Write(UnknownPtr^, NewSize);
   OutMemoryStream.Position := 0;
 finally
   FreeMem(UnknownPtr, NewSize);
 end;
end;

procedure UnPackStream(var sSrc: TMemoryStream);
var
 UnknownPtr: pointer;
 NewSize: integer;
begin
 sSrc.Position := 0;
 try
   DeCompressBuf(sSrc.Memory, sSrc.Size, 0, UnknownPtr, NewSize);
   sSrc.clear;
   sSrc.Position := 0;
   sSrc.Write(UnknownPtr^, NewSize);
   sSrc.Position := 0;
 finally
   FreeMem(UnknownPtr, NewSize);
 end;
end;


 
Sha ©   (2006-12-05 00:07) [6]

... или так:

 s:=ZCompressStr(Edit1.Text);
 Edit2.Text:=ZDecompressStr(s);

если зайти в гости на http://www.base2ti.com/zlib.htm


 
Sha ©   (2006-12-05 00:59) [7]

Да, и в [5] я б не стал бы try-finally использовать
и, кстати, при использовании Борландовского ZLib.pas
ближе к теме будет что-нибудь вроде

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
 NewPtr: pointer;
 NewLen: integer;
begin
 s:=Edit1.Text;

 CompressBuf(pointer(s),Length(s),NewPtr,NewLen);
 SetString(s,pchar(NewPtr),NewLen);
 FreeMem(NewPtr);

 DecompressBuf(pointer(s),Length(s),0,NewPtr,NewLen);
 SetString(s,pchar(NewPtr),NewLen);
 FreeMem(NewPtr);

 Edit2.Text:=s;
end;


 
Eraser ©   (2006-12-05 16:54) [8]

> [7] Sha ©   (05.12.06 00:59)

вообще боландовский zlib заметно медленнее оригинального, который можно скачать по вашей ссылке.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
15-1168244315
vajo
2007-01-08 11:18
2007.01.28
Посоветуйте колонки для компьютера.


15-1167579985
DevilDevil
2006-12-31 18:46
2007.01.28
Отдельное поздравление DimeBr!


3-1162928941
Kley
2006-11-07 22:49
2007.01.28
сохранение данных связанных таблиц


1-1165330455
GrayFace
2006-12-05 17:54
2007.01.28
Наткнулся в реестре на параметр "Add interface methods"


15-1168001545
Anatoly Podgoretsky
2007-01-05 15:52
2007.01.28
День рождения шефа