powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Распаковка определённых папок/файлов из .7z (JEDI)
3 сообщений из 3, страница 1 из 1
Распаковка определённых папок/файлов из .7z (JEDI)
    #39687043
Aqel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция - распаковывает полностью архив, а нужно что бы только опредёлённые папки и файлы:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
function Decompress(FileName, DestDir: String): Boolean;      
var
  ArcClass: TJclDecompressArchiveClass;
  MyArc: TJclDecompressArchive;
  //WideString    -     Имена файлов
begin
  Decompress:= False;
  // Filename = name.7z или name.zip
  // DestDir = полный путь к существующему каталогу
  //ArcClass:= GetArchiveFormats.FindDecompressFormat(FileName);
  ArcClass:= GetArchiveFormats.FindDecompressFormat(lowercase(FileName));
  Application.ProcessMessages;
  Try
    if Assigned(ArcClass) then
      Begin
        MyArc:= ArcClass.Create(FileName);
        if (MyArc is TJclSevenZipDecompressArchive) then
          Begin
            try
              MyArc.ListFiles; { Сбой, не делая это первым }
            { ExtractAll (AutocreateSubDir) должен быть установлен верно }
              MyArc.ExtractAll(DestDir, True);                     //ExtractSelected(DestDir, True);    !!! Полагаю надо это использовать, но как?
              Decompress:= True;
            except on E: EJclCompressionError do
              Begin
                ShowMessage(e.Message);
              End;
            end;
          End
        Else
          ShowMessage('Не поддерживаемая 7z.dll');
      End;
  Finally
    MyArc.Free;
  End;
end;



Вот ещё один вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Вот нашёл:
Код:
uses
   JclCompression;

procedure TfrmSevenZipTest.Button1Click(Sender: TObject);
const
   FILENAME = 'F:\temp\test.zip';
var
   archiveclass: TJclDecompressArchiveClass;
   archive: TJclDecompressArchive;
   item: TJclCompressionItem;
   s: String;
   i: Integer;
begin
   archiveclass:= GetArchiveFormats.FindDecompressFormat(FILENAME);
   if not Assigned(archiveclass) then
      raise Exception.Create('Could not determine the Format of ' + FILENAME);
   archive:= archiveclass.Create(FILENAME);
   try
      if not (archive is TJclSevenZipDecompressArchive) then
         raise Exception.Create('This format is not handled by 7z.dll');
      archive.ListFiles;
      s:= Format('test.zip Item Count: %d'#13#10#13#10, [archive.ItemCount]);
      for i:= 0 to archive.ItemCount - 1 do
      begin
         item:= archive.Items[i];
         case item.Kind of
            ikFile:
               s:= s + IntToStr(i+1) + ': ' + item.PackedName + #13#10;
            ikDirectory:
               s:= s + IntToStr(i+1) + ': ' + item.PackedName + '\'#13#10;//'
         end;
      end;
      if archive.ItemCount > 0 then
      begin
//         archive.Items[0].Selected := true;
//         archive.ExtractSelected('F:\temp\test');
         archive.ExtractAll('F:\temp\test');
      end;
      ShowMessage(s);
   finally
      archive.Free;
   end;
end;



Оба варианта распаковывают ВЕСЬ архив отлично, но как сделать только то что мне нужно распаковать (папки/файлы) ?
...
Рейтинг: 0 / 0
Распаковка определённых папок/файлов из .7z (JEDI)
    #39687163
Олег Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aqel,
Определиться, что есть "то, что мне нужно",
взять тут обертку, изучить ее и применить.
...
Рейтинг: 0 / 0
Распаковка определённых папок/файлов из .7z (JEDI)
    #39687247
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aqel,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
    archive: TJclDecompressArchive;


    archive.ListFiles;                                 // список файлов в архиве
    // ...
    archive.Items[XXXX].Selected:=true;   // пометить файл с индексом XXXX в общем списке файлов для извлечения
    // ...
    archive.ExtractSelected( DestinationPath, true);   // извлечь выбранные в папку назначения с полными путями
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Распаковка определённых папок/файлов из .7z (JEDI)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]