it-swarm-es.tech

¿Utiliza 7-Zip de Delphi?

Me gustaría usar las DLL de 7-Zip de Delphi pero no he podido encontrar documentación o ejemplos decentes. ¿Alguien sabe cómo usar los archivos DLL 7-Zip de Delphi?

24
Lawrence Barsanti

A partir de la versión 1.102, Biblioteca de códigos JEDI tiene soporte para 7-Zip integrado en la unidad JclCompression . Sin embargo, todavía no lo he usado.

29
Oliver Giesen

Ampliando la respuesta de Oliver Giesen, como con gran parte de la biblioteca de códigos JEDI, no pude encontrar ninguna documentación decente, pero esto funciona para mí:

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;
24
jasonpenny

7 API de complemento Zip

http://www.progdigy.com/?page_id=1

6

Delphi ahora tiene soporte Zip nativo multiplataforma con TZipFile en XE2:

Cómo extraer archivos Zip con TZipFile en Delphi XE2 y FireMonkey

4
Marcus Adams

Zip y 7z sin DLL, pruebe Synopse: http://synopse.info/forum/viewtopic.php?pid=16

4
Kachwahed

Si tiene la intención de utilizar 7Zip solo para Zip y descomprimir, eche un vistazo al componente TZip . He escrito un pequeño contenedor para mis propios fines, que puede encontrar en el archivo Zipper.pas , no dude en volver a utilizarlo.

1
Drejc

Probé muchas soluciones y tuve problemas, esta funcionó.

Descargue https://github.com/zedalaye/d7Zip Copie 7z.dll y sevenzip.pas al directorio de su proyecto y agregue sevenzip.pas a su proyecto.

Entonces puedes usar esto para descomprimir:

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;

Uso:

Unzip7zFile(ExtractFilePath(Application.ExeName) + 'STR_SI_FULL_1000420.7z');
0
Tone Škoda