Pregunta
Me gustaría utilizar las DLL 7-Zip de Delphi pero no he podido encontrar documentación ni ejemplos decentes.¿Alguien sabe cómo utilizar las DLL 7-Zip de Delphi?
Solución
A partir de la versión 1.102 el Biblioteca de códigos JEDI tiene soporte para 7 cremalleras construido en el JclCompresión unidad.Aunque todavía no lo he usado.
Otros consejos
Ampliando la respuesta de Oliver Giesen, como ocurre 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;
7 API del complemento Zip
Zip y 7z SIN DLL, pruebe Synopse:http://synopse.info/forum/viewtopic.php?pid=163
Delphi ahora tiene soporte zip nativo multiplataforma con TZipFile en XE2:
Cómo extraer archivos zip con TZipFile en Delphi XE2 y FireMonkey
Si tiene intención de utilizar 7Zip sólo para comprimir y descomprimir, consulte la TZip componente.He escrito un pequeño envoltorio para mis propios fines, que puedes encontrar en el Cremallera.pas archivo, no dude en reutilizarlo.
Probé muchas soluciones y tuve problemas, esta funcionó.
Descargar https://github.com/zedalaye/d7zipCopie 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');