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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с TVCLZip, Не могу разархивировать 
V
    Опции темы
killerbean
Дата 1.12.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Столкнулся с непонятной проблемой, не могу распаковать архив TVCLZip'ом. Использую следующий код:

Код

unarchivate := TVCLUNZip.Create(nil);
unarchivate.ZipName := InBox + '\archive.zip';
unarchivate.DestDir := InBox + '\';
unarchivate.RetainAttributes := True;
Ret := unarchivate.UnZip;
ShowMessage(IntToStr(Ret));
unarchivate.Free;


Путь существует, архив перед вызовом этого кода на месте. Вроде всё делал по хелпу, но не распаковывает ни в какую. Как решить вопрос?
PM MAIL   Вверх
PROeXT
Дата 1.12.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2005
Где: Москва

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



Ошибки какие-нибудь вылетают или все проходит "втихую"? 

Да... И строка
Код

unarchivate := TVCLUNZip.Create(nil);

Может, стоит попробовать передать в качестве владельца реально существующий компонент? 

Это сообщение отредактировал(а) PROeXT - 1.12.2006, 10:39
PM MAIL ICQ   Вверх
killerbean
Дата 1.12.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ошибок нет. unarchivate.UnZip возвращает 0, т.е. ничего не разархивировал  smile 

Пробовал и реальный компонент (код тот же только без Create и Free), эффект тот же


Это сообщение отредактировал(а) killerbean - 1.12.2006, 10:42
PM MAIL   Вверх
Romikgy
Дата 1.12.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

procedure TForm1.Button1Click(Sender: TObject);
var unarchivate:TVCLUnZip;
InBox: string;
 sl:TStringList;
Ret: LongInt;
begin
unarchivate := TVCLUNZip.Create(nil);
unarchivate.ZipName := InBox + '\archive.zip';
unarchivate.DestDir := InBox + '\';
unarchivate.RetainAttributes := True;
sl:= TStringList.Create;
sl.Clear;
sl.Add('*.*');
unarchivate.FilesList:=sl;
sl.Free;
Ret := unarchivate.UnZip;
ShowMessage(IntToStr(Ret));
unarchivate.Free;
end;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
killerbean
Дата 1.12.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Romikgy этот код у вас работает? У меня нет. 
В документации написано, что если не передавать в список файлов маски, то будет распакован весь архив (что мне и нужено).

PM MAIL   Вверх
Romikgy
Дата 1.12.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(killerbean @  1.12.2006,  12:20 Найти цитируемый пост)
этот код у вас работает? У меня нет. 

У меня да
у мя версия 
VCLZip Native Delphi Zip/UnZip Component! (Version 2.03 Mar 10, 1998)
и если порытся в исходниках, то видно , что 
Код

constructor TVCLUnZip.Create( AOwner: TComponent );
....
FFilesList := TStringList.Create;

и
Код

function TVCLUnZip.UnZip: Integer;

Result := UnzipFiles(theZipFile);

function TVCLUnZip.UnZipFiles( zip_in_file: TStream ): Integer;

While (i < FFilesList.Count) do 

и если здесь FFilesList.Count равно нулю то ничего не распаковывается!

PS по всем исходникам VCLZip больше нигде нет работы с FFilesList


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
killerbean
Дата 1.12.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Понятно, но у меня всё равно unarchivate.UnZip возвращает 0. 
Я в кодах пока не разберался но в оффициальной документации в разделе описания распаковки написано следующее:

Код

If you simply wish to extract all files from a particular zip file it is as easy as just specifying the ZipName and DestDir properties and then call the UnZip method.  That's it.


из этих слов получаеться, что не обязательно указывать список файлов, хотя хоть указую хоть нет, распаковка не происходит  smile 

PS. Версия VCLZip Pro v3.06.2 for Delphi BCB

Это сообщение отредактировал(а) killerbean - 1.12.2006, 13:53
PM MAIL   Вверх
Romikgy
Дата 1.12.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(killerbean @  1.12.2006,  12:53 Найти цитируемый пост)
Версия VCLZip Pro v3.06.2 for Delphi BCB

где взять?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Эксперт
****


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

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




M
Snowy
killerbean, вверху страницы написаны правила.
Будь добр - прочитай их.
Первый и второй пункты выделены жирным шрифтом.

PM MAIL   Вверх
killerbean
Дата 1.12.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



извините, очень спешил, такого больше не повториться
PM MAIL   Вверх
Romikgy
Дата 1.12.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

property DoAll : Boolean 

Description 

If set to True then all files in the zipfile will be extracted when the UnZip Method is called. 

Код

unarchivate.DoAll:=true;

попробуй так!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
killerbean
Дата 1.12.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не помогает,  я уже даже и не знаю, что делать  smile 
PM MAIL   Вверх
Snowy
Дата 1.12.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Возьми бесплатную вторую версию smile

Добавлено @ 15:02 
http://files.vingrad.ru/Snowy/component/VCLZip.rar
PM MAIL   Вверх
Romikgy
Дата 1.12.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

unarchivate.FilesList. Add ('*.*');

и так не работает?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
killerbean
Дата 1.12.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не выходит. На данный момент код имеет следующий вид:
Код

var
  Ret: Integer;
  unarchivate : TVCLUnZip;
  sl:TStringList;
begin
    unarchivate := TVCLUNZip.Create(nil);
    unarchivate.ZipName := InBox + '\archive.zip';
    unarchivate.DestDir := InBox + '\';
    unarchivate.RetainAttributes := True;
    sl:= TStringList.Create;
    sl.Clear;
    sl.Add('*.*');
    unarchivate.FilesList:=sl;
    sl.Free;
    unarchivate.DoAll := True;
    Ret := unarchivate.UnZip;
    ShowMessage(IntToStr(Ret));
    unarchivate.Free;
end;


Тогда щас буду пробовать 2-ю версию. Надо же как-то выходить из сложившейся ситуации.
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.0860 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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