Форум: "Основная";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизКак распаковать 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c