opel431, ай -яй -яй
Код:
procedure Unzip7z_All(aCompressFileName: string);
var
Zz: I7zInArchive;
outDir: string;
begin
Zz := CreateInArchive(CLSID_CFormat7z);
with Zz do // интерфейс архива
begin
OpenFile(aCompressFileName); // имя архива
outDir := ChangeFileExt(aCompressFileName, ''); // выходной каталог
ForceDirectories(outDir); // создать
ExtractTo(outDir);
end;
end;
{ применение }
procedure TForm1.btn1Click(Sender: TObject);
begin
Unzip7z_All(ExtractFilePath(Application.ExeName) + 'Архив.7z');
end;
Если на то пошло , то бы сделали так
Код:
procedure Unzip7z_All(aCompressFileName, outDir: string);
var
Zz: I7zInArchive;
begin
Zz := CreateInArchive(CLSID_CFormat7z);
with Zz do // интерфейс архива
begin
OpenFile(aCompressFileName); // имя архива
ForceDirectories(outDir); // создать
ExtractTo(outDir);
end;
end;
{ применение }
procedure TForm1.btn1Click(Sender: TObject);
begin
Unzip7z_All(ExtractFilePath(Application.ExeName) + 'Архив.7z' , 'путь распаковки');
end;
Код:
Unzip7z_ExtractFile(const aCompressFileName: string;
const aOutSaveFileName: string): Boolean;
var
fs: TFileStream;
i: Integer;
InArchive: I7zInArchive;
Item: string;
begin
Result := False;
if not FileExists(aCompressFileName) then
begin
ShowMessage('File no found');
Exit;
end;
InArchive := CreateInArchive(CLSID_CFormat7z);
try
try
InArchive.OpenFile(aCompressFileName);
if InArchive.NumberOfItems > 0 then
begin
for i := 0 to InArchive.NumberOfItems - 1 do
begin
Item := InArchive.ItemPath[i];
if not InArchive.ItemIsFolder[i] then
begin
if Item = ( { 'Имя папки в архиве\' + } ExtractFileName(aOutSaveFileName)) then
begin
if FileExists(aOutSaveFileName) then
DeleteFile(aOutSaveFileName);
fs := TFileStream.Create(aOutSaveFileName,
fmCreate or fmOpenWrite);
try
InArchive.ExtractItem(i, fs, False);
finally
FreeAndNil(fs);
end;
end;
end;
Break;
end;
end;
except
on E: Exception do
begin
Result := False;
end;
end;
finally
InArchive := nil;
end;
end;
{ применение }
procedure TForm1.btn2Click(Sender: TObject);
begin
if Unzip7z_ExtractFile(ExtractFilePath(Application.ExeName) + 'Архив.7z',
'Имя файла.txt') then
ShowMessage('No found file');
end;
Эта разве функция сможет извлечь определённую папку с файлами из архива ?