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?
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;
7 Zip Plugin API
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');