Frage

Ich mag den 7-Zip-DLLs von Delphi verwenden, aber nicht in der Lage anständige Dokumentation oder Beispiele zu finden. Wer weiß, wie die 7-Zip-DLLs von Delphi benutzen?

War es hilfreich?

Lösung

Ab Release 1.102 der JEDI Code Library Unterstützung hat für < a href = "http://en.wikipedia.org/wiki/7-Zip" rel = "noreferrer"> 7-Zip in die JclCompression Einheit. Habe es selbst noch nicht benutzt, aber.

Andere Tipps

Die Erweiterung auf Oliver Giesen Antwort, wie mit viel des JEDI Code Library, konnte ich keine anständige Dokumentation finden, aber das funktioniert für mich:

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;

Zip und 7z mit NO DLL, ausprobieren Synopse: http://synopse.info/forum/viewtopic.php?pid=163

Delphi hat nun nativen, Cross-Plattform-Zip-Unterstützung mit TZipFile in XE2:

Wie Zip-Dateien mit TZipFile in Delphi extrahieren XE2 und Firemonkey

Wenn Sie beabsichtigen, 7Zip zu verwenden nur für Zip entpacken und werfen Sie einen Blick auf die TZip Komponente . Ich habe ein kleines Wrapper für meine eigenen Zwecke geschrieben, die Sie in der Zipper.pas Datei, können Sie wieder zu verwenden.

ich viele Lösungen ausprobiert und hatte Probleme, das man gearbeitet.

Herunterladen https://github.com/zedalaye/d7zip Kopieren 7z.dll und sevenzip.pas zu einem Projekt diroctory und fügen sevenzip.pas zu Ihrem Projekt.

Dann können Sie diese verwenden, um zu entpacken:

using sevenzip;

procedure Unzip7zFile (zipFullFname:string);
  var
    outDir:string;
  begin
    with CreateInArchive(CLSID_CFormat7z) do
    begin  
      OpenFile(zipFullFname);
      outDir := ChangeFileExt(zipFullFname, '');
      ForceDirectories (outDir);
      ExtractTo(outDir);
    end;
  end;

Verbrauch:

Unzip7zFile(ExtractFilePath(Application.ExeName) + 'STR_SI_FULL_1000420.7z');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top