[Delphi] Как распаковать *.jar?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kandi, 23 May 2012.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Добры день, вот пытаюсь распаковать *.jar файл через ZLib, но вылазит data error - в API Embarcadero это означает следующие - The input data was corrupted or incomplete. (Повреждён типо). Как быть?
     
  2. t3cHn0iD

    t3cHn0iD Banned

    Joined:
    6 Apr 2009
    Messages:
    313
    Likes Received:
    63
    Reputations:
    66
    А если WinRAR'ом открывать, то нормально все ?
    Попробуй этот компонент - http://www.rarlab.com/rar/TDFUnRar.zip и этот - http://delphiexpert.ru/load/Components/zipmaster.zip
     
    #2 t3cHn0iD, 23 May 2012
    Last edited: 23 May 2012
  3. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Обычным WinRar открывается норм) а вот тут не хочет, скорее всего нужно отступать какое-то кол-во байт и потом распаковывать, где-то такое читал, но там был *.swf. Спасибо попробую, отпишу!
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    jar - это zip с нулевым сжатием.
     
  5. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Всем спасибо.

    Воспользовался библиотекой SevenZip, распаковался архив на раз два. Пример кода:
    Code:
    uses SevenZip;
    
    var
      I : Integer;
    begin
      // Получаем список файлов
      with CreateInArchive(CLSID_CFormatZip) do
        begin
          OpenFile(ExtractFilePath(ParamStr(0)) + 'file.jar');
          MLog.Lines.Append('Список Файлов:');
          for I := 0 to NumberOfItems - 1 do
            if not ItemIsFolder[I] then
              MLog.Lines.Append(ItemPath[I]);
        end;
    
      // Распаковывает файлы 
      with CreateInArchive(CLSID_CFormatZip) do
       begin
         OpenFile(ExtractFilePath(ParamStr(0)) + 'file.jar');
         ExtractTo(ExtractFilePath(ParamStr(0)) + 'file');
         MLog.Lines.Append('Архив распакован!');
       end;
    end;
    
    Качал отсюда - API SevenZip.zip (Внутри - примеры, sevenzip.pas и *.dll)

    :rolleyes:
     
    1 person likes this.