Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распаковка gz потока, распаковать из TStream в TStringList 
:(
    Опции темы
Elfix
Дата 2.2.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Привет.

Столкнулся с проблемой. У меня есть переменная типа TStream, которая содержит запакованные данные формата gz. Необходимо этот поток распаковать и результат распаковки положить в переменную типа TStringList. Некоторые пользователи подсказывали что есть класс TDecompresionStream или подобный в Zlib (стандартный модуль Delphi), но работать с ним у меня так и не получилось. Возможно есть и другой способ, но не хотелось бы засорять Delphi ненужными компонентами. Возможно уже есть готовая функция?
Очень надеюсь на вашу помощь. У меня Delphi 7.

Уже благодарен...
PM MAIL   Вверх
Snowy
Дата 2.2.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



gz и ZLib это не совсем одно и то же.
ZLib - алгоритм компрессии, применяемый в gzip.
gz - расширение файла gzip архивов.
Для решение затачи нужно всё таки определиться - "что в чёрном ящике"  smile 
PM MAIL   Вверх
Elfix
Дата 2.2.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Пока у меня есть данные некогда запакованные архиватором gunzip.
Их я получаю из Интернета в виде потока TStream. Теперь надо распаковать и положить в TStringList. Snowy, я очень надеюсь на твою помощь и, конечно же, помощь других программистов.
PM MAIL   Вверх
Elfix
Дата 2.2.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Люди, я так и не нашел ответа на вопрос, поэтому тема до сих пор актуальна. Попытался что то сам сочинить, но код, выдает ошибку Invalid Stream Operation. Возможно я не правильно работаю с потоком, а возможно я вообще не тот путь избрал. Помогите разобраться. Вот то, что я уже сделал сам:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Input: TFileStream;
 Output: TStringStream;
 GZ: TDecompressionStream;
begin
 try
  Input:=TFileStream.Create('D:\data.gz', fmOpenRead);
  Output:=TStringStream.Create('');
  GZ:=TDecompressionStream.Create(Input);
  Output.Write(GZ, GZ.Size);
  Memo1.Lines.Clear;
  Memo1.Lines.Text:=Output.DataString;
 finally
  Input.Free;
  Output.Free;
  GZ.Free;
 end;
end;

PM MAIL   Вверх
Snowy
Дата 2.2.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Я пытался разобрать вручную.
Но не получается.
Без разбора формата это долхлый помер.
А разбирать формат лень.
Анализировал по исходнякам. Разбор заголовка понятен. Но тело декомпресить не хочет.
Ставь компонент - меньше мороки.
На torry их есть.
PM MAIL   Вверх
Elfix
Дата 4.2.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



В общем я решил отказаться от компонентов и от всякой головоломки и тупо воспользоваться готовыми программами, передавая им в параметры имя моего упакованного файла. Но вот проблема, при использовании Rar.exe у меня разархивируются архивы *rar, но не gz. Хотя в общем то архиватор должен поддерживать этот формат. Передаю параметры таким образом
Код

WinExec('rar.exe e data.gz', sw_hide);

Но распаковки не происходит. Архиватор ругается на неизвестность этого формата. Но ведь в оболочке то WinRar все работает! И при попытке разархивирования такого файла указанным способом в TotalComander все проходит на ура. В чем проблема тогда у меня? Может я не верно использую строку? Подскажите, плз, как передавать параметры архиватору Rar.exe чтобы на выходе получить уже распакованный файл?

Заранее благодарен...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.