Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
2-1168433997
NovaC
2007-01-10 15:59
2007.01.28
WinToDos & CopyFile


2-1168630655
Moholith
2007-01-12 22:37
2007.01.28
Поиск фрагментов строки и фрагментов слова.


15-1168167674
ogi123
2007-01-07 14:01
2007.01.28
Python


11-1145953226
Dodfr
2006-04-25 12:20
2007.01.28
USE_NAMES do not work ?


15-1168465744
normandia
2007-01-11 00:49
2007.01.28
Впервые столкнулся с Win XP Home Edition. Плачевно.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский