Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 08:10   #1
flug
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 48
По умолчанию 7-Zip и Delphi

Очень хочется из своей программы распаковать архивы 7-Zip, нашёл через поиск 7-zip Delphi API с сайта progdigy.com, так вот как распаковать архивы с прогресс баром я понял, но вот вопрос как показывать во время распаковки имя распаковываемого файла никак не пойму, может кто сталкивался с 7-zip Delphi API, подскажите что делать?
В исходниках нашёл функцию function GetItemName(const index: integer): UnicodeString; stdcall; но как ею воспользоваться никак не пойму. Помогите!
flug вне форума Ответить с цитированием
Старый 08.12.2009, 09:41   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

www.proggears.ru. Там на тему 7z аж 2 сдк.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 08.12.2009, 10:51   #3
flug
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 48
По умолчанию

notHaker
Спасибо конечно, но с 1-ым сдк совсем ничего не понятно, а второй это и есть 7-zip Delphi API с сайта progdigy.com, именно про негоя и написал в первом посте, так что вопрос остаётся открытым.

Уважаемые программисты, ну пожалуйста скачайте 7-zip Delphi API, и гляньте там исходник всего 56кб.
Вот посмотрите до чего удалось додуматься, в примере написано
Код:
Extract "n" Items
function GetStreamCallBack(sender: Pointer; index: Cardinal;
  var outStream: ISequentialOutStream): HRESULT; stdcall;
begin
  case index of ...
    outStream := T7zStream.Create(aStream, soReference);
  Result := S_OK;
end;

procedure TMainForm.ExtractClick(Sender: TObject);
var
  i: integer;
  items: array[0..2] of Cardinal;
begin
  with CreateInArchive(CLSID_CFormat7z) do
  begin
    OpenFile('c:\test.7z');
    // items must be sorted by index!
    items[0] := 0;
    items[1] := 1;
    items[2] := 2;
    ExtractItems(@items, Length(items), false, nil, GetStreamCallBack);
  end;
end;
А вот мой код, это максимум что пришло в голову чтобы это использовать:
Код:
function GetStreamCallBack(sender: Pointer; index: Cardinal;
  var outStream: ISequentialOutStream): HRESULT; stdcall;
begin
    outStream := T7zStream.Create(TFileStream.Create('c:\test\'+form1.ListBox1.Items.Strings[index]), soReference);
  Result := S_OK;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i, n: integer;
  items: array of Cardinal;
begin
  with CreateInArchive(CLSID_CFormat7z) do
  begin
    OpenFile('c:\test.7z');
    SetLength(items, NumberOfItems);
    for i := 0 to NumberOfItems - 1 do //просматриваю список файлов внутри архива и заношу его в listbox1
     if not ItemIsFolder[i] then
      begin
       listbox1.Items.Add(Itempath[i]) ;
       items[i]:=i;
      end;
    ExtractItems(@items, Length(items), false, nil, GetStreamCallBack);
  end;
end;
И вроде по логике всё правильно сделал, и даже компилится, но при нажатии на Button2 пишет что для завершения операции недостаточно памяти.
Ну, пожалуйста не поленитесь посмотрите 7-zip Delphi API, глядишь совместными усилиями разберёмся.

Последний раз редактировалось Stilet; 13.04.2010 в 13:25.
flug вне форума Ответить с цитированием
Старый 13.04.2010, 12:33   #4
Zanooda
 
Регистрация: 20.01.2010
Сообщений: 9
Смех Obj-файлы 7zip'a.......

А освобождать, стало быть, надувные дурошлёпы будут...
В частности, TFileStream ушёл в пампасы.
Наполняйтесь кефиром на ночь - помогает.
...
А быть может, некто-кто-нибудь-кто-либо в курсе тут...
Есть ли для 7zip Дельфовидные файлы, типа "ZLib.pas", "BZip2.pas".
В них ещё *.obj всунуты..
То есть, возможно ли ископать где-то паскалевский вариант заголовков
функций с прилепленными к ним объектными файлами 7zip`a?
И MakeFile до кучи... ??
Благодарствую.
Zanooda вне форума Ответить с цитированием
Старый 04.04.2011, 12:21   #5
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

Доброго времени суток.........уважаемые мастера подскажите плииз каким образом с помощью компонента 7zip, прочитать данные находящиеся в архиве не распаковывая их?
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума Ответить с цитированием
Старый 13.05.2011, 12:00   #6
Aqel
Пользователь
 
Аватар для Aqel
 
Регистрация: 07.05.2011
Сообщений: 24
По умолчанию

Да , я тоже этим вопросом интересуюсь, нащёл библиотеку/компонент SevenZipVCL_D12, только не могу понять как проверить верный ли пароль на архив с помощью Delphi.
Всё намного проще, чем есть на самом деле...
Aqel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать txt в zip в Delphi apromix Общие вопросы Delphi 1 11.09.2009 22:20
Zip Witaliy PHP 1 11.07.2008 17:33
Zip or Rar (D7) Simply-Art Компоненты Delphi 3 01.06.2008 17:56
Zip архив urels Общие вопросы Delphi 7 26.04.2008 17:31
ZIP + хост JoanM Свободное общение 1 09.02.2008 16:28