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

Код: 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
13.08.2018, 22:58
    #39687163
Олег Третьяков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распаковка определённых папок/файлов из .7z (JEDI)
Aqel,
Определиться, что есть "то, что мне нужно",
взять тут обертку, изучить ее и применить.
...
Рейтинг: 0 / 0
14.08.2018, 09:22
    #39687247
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распаковка определённых папок/файлов из .7z (JEDI)
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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Распаковка определённых папок/файлов из .7z (JEDI) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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