سؤال
أرغب في استخدام ملفات 7-Zip DLL من دلفي ولكن لم أتمكن من العثور على وثائق أو أمثلة مناسبة.هل يعرف أحد كيفية استخدام ملفات 7-Zip DLL من دلفي؟
المحلول
اعتبارًا من الإصدار 1.102 مكتبة كود JEDI لديه دعم ل 7-الرمز البريدي بنيت في JclCompression وحدة.لم أستخدمها بنفسي بعد، رغم ذلك.
نصائح أخرى
بالتوسع في إجابة أوليفر جيسين، كما هو الحال مع الكثير من مكتبة كود JEDI، لم أتمكن من العثور على أي وثائق مناسبة، ولكن هذا يناسبني:
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
Zip و7z بدون DLL، جرب الملخص:http://synopse.info/forum/viewtopic.php?pid=163
لدى دلفي الآن دعم مضغوط أصلي عبر الأنظمة الأساسية مع TZipFile في XE2:
كيفية استخراج الملفات المضغوطة باستخدام TZipFile في Delphi XE2 وFireMonkey
لقد جربت العديد من الحلول وواجهت مشاكل، هذا الحل نجح.
تحميل https://github.com/zedalaye/d7zipانسخ 7z.dll و sevenzip.pas إلى دليل مشروعك وأضف Sevenzip.pas إلى مشروعك.
ثم يمكنك استخدام هذا لفك الضغط:
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;
الاستخدام:
Unzip7zFile(ExtractFilePath(Application.ExeName) + 'STR_SI_FULL_1000420.7z');