Painkiller
03-10-2018, 12:49
Всем привет! Есть задача распаковать определённый файл из архива 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;
Использую функцию
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;