Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [sevenzip] Как распаковать определённый файл из архива 7zip

Ответить
Настройки темы
Delphi - [sevenzip] Как распаковать определённый файл из архива 7zip

Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1298
Благодарности: 376

Профиль | Отправить PM | Цитировать


Изменения
Автор: Painkiller
Дата: 04-10-2018
Вложения
Тип файла: 7z SevenZipIntf.7z
(9.4 Kb, 16 просмотров)
Всем привет! Есть задача распаковать определённый файл из архива 7zip. Воспользовался модулем (прикрепил к теме).
Использую функцию
Код: Выделить весь код
uses
...sevenzip, ...

function SevenZip_ExtractFile(const aInterf: I7zInArchive; const aPath: string;  const aSavePath: string): Boolean;
var  i, indx: Integer;  fs: TFileStream;  s1, s2: string;
begin  Result := False;  indx := -1;  for i := 0 to aInterf.NumberOfItems - 1
do  begin    if (not aInterf.ItemIsFolder[i])
then    begin
s1 := LowerCase(Trim((aInterf.ItemPath[i] + aInterf.ItemName[i]))); 
s2 := LowerCase(Trim(aPath));
if (s1 = s2)  then      begin 
indx := i;
Break;
end;    end;  end;
if (indx <> -1) then  begin
try      fs := TFileStream.Create(aSavePath, fmCreate or fmOpenWrite); 
try        aInterf.ExtractItem(indx, fs, False);        Result := True;
 finally        FreeAndNil(fs);      end;    except      Result := False;
 end;  
end; 
end;

// Пытаюсь  распаковать:
procedure TForm1.Button1Click(Sender: TObject);
var Zz: I7zInArchive;
begin Zz:= CreateInArchive(CLSID_CFormat7z);
Zz.OpenFile('C:\hidcon.7z'); if SevenZip_ExtractFile(Zz,'hidcon_x64.exe','C:\3333') then begin caption:='1' end else begin caption:='0' ;
end; end; end.
И получаю всегда 0 . Ничего не распаковывает. Где я ошибся ? Ошибок при компиляции нет.

Решил проблему так :
Новый модуль прикрепил к теме .
Сам код :
Код: Выделить весь код
uses
 SevenZipIntf

function SevenZip_ExtractFile(const aInterf: I7zInArchive; const aPath: string;
const aSavePath: string): Boolean;
var
i, indx: Integer;
fs: TFileStream;
s1, s2: string;
begin
Result := False;
indx := -1;
for i := 0 to aInterf.NumberOfItems - 1 do
begin
if (not aInterf.ItemIsFolder[i]) then
begin
s1 := LowerCase(Trim((aInterf.ItemPath[i] + aInterf.ItemName[i])));
s2 := LowerCase(Trim(aPath));
if (s1 = s2) then
begin
indx := i;
Break;
end;
end;
end;
if (indx <> -1) then
begin
try
fs := TFileStream.Create(aSavePath, fmCreate or fmOpenWrite);
try
aInterf.ExtractItem(indx, fs, False);
Result := True;
finally
FreeAndNil(fs);
end;
except
Result := False;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Zz: I7zInArchive;
begin
Zz:= CreateInArchive(CLSID_CFormat7z,'директория где лежит 7z.dl');
Zz.OpenFile('C:\sevenzip.7z');
if SevenZip_ExtractFile(Zz,'sevenzip.pas','C:\sevenzip.pas') then begin
caption:='готово' end else begin
caption:='ошибка' ;
end;
end;

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:49, 03-10-2018

 

Старожил


Сообщения: 365
Благодарности: 10

Профиль | Отправить PM | Цитировать


Painkiller, Подскажите, при добавлении ПАПКИ в архив использую
Код: Выделить весь код
Arch.AddFiles(SourceFOLDER,'MyFOLDER','*.*',True);
Для указания прогресса
Код: Выделить весь код
Arch.SetProgressCallback (nil, ProgressCallback);
Как отобразить еще и прогресс упаковки каждого файла?
Т.Е. одновременно
1. Общий прогресс
2. прогресс упаковки каждого файла

Отправлено: 12:06, 24-01-2022 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [sevenzip] Как распаковать определённый файл из архива 7zip

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как распаковать файл формата nanddump? Diman19 Хочу все знать 1 22-02-2018 23:53
CMD/BAT - [решено] Извлечь из архива только определенную папку/определенный файл SharkyEXE Скриптовые языки администрирования Windows 34 09-08-2017 22:34
Утилита для создания/изменения 7zip SFX-архива XXXler Автоматическая установка Windows 2000/XP/2003 38 24-06-2017 14:23
Разное - Как "спасти" файл из повреждённого архива ? MKN Программирование и базы данных 1 03-03-2008 11:06
Как распаковать файл на удаленном компе? phpbook Вебмастеру 3 10-06-2004 22:31




 
Переход