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

Показать сообщение отдельно

Аватара для Painkiller

Ветеран


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


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

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


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;
Эта разве функция сможет извлечь определённую папку с файлами из архива ?

-------
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]


Последний раз редактировалось Painkiller, 04-10-2018 в 12:13.


Отправлено: 12:03, 04-10-2018 | #8