关于7zip:使用Delphi的7-Zip吗?

关于7zip:使用Delphi的7-Zip吗?

Using 7-Zip from Delphi?

我想使用Delphi的7-Zip DLL,但找不到合适的文档或示例。有谁知道如何使用Delphi中的7-Zip DLL?


从1.102版开始,JEDI代码库支持JclCompression单元内置的7-Zip。不过,我自己还没有使用过它。


像许多JEDI代码库一样,扩展了Oliver Giesen的答案,我找不到任何合适的文档,但这对我有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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插件API

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


Delphi现在在XE2中具有TZipFile的本机跨平台zip支持:

如何在Delphi XE2和FireMonkey中使用TZipFile提取zip文件


Zip和7z没有DLL,请尝试Synopse:
http://synopse.info/forum/viewtopic.php?pid=163


如果仅打算将7Zip用于zip和unzip,请查看TZip组件。
我已经为我自己编写了一个小的package程序,您可以在Zipper.pas文件中找到它,可以随时重复使用。


我尝试了许多解决方案,但遇到了问题,这一解决方案奏效了。

下载https://github.com/zedalaye/d7zip
将7z.dll和sevenzip.pas复制到您的项目目录中,然后将sevenzip.pas添加到您的项目中。

然后您可以使用它来解压缩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;

用法:

1
Unzip7zFile(ExtractFilePath(Application.ExeName) + 'STR_SI_FULL_1000420.7z');

推荐阅读

    linux命令chm文档?

    linux命令chm文档?,电脑,系统,文件,首页,百度,软件,电机,管理,产品,设备,谁知

    linux中编辑文档命令?

    linux中编辑文档命令?,状态,工作,命令,电脑,信息,第一,系统,编辑,终端,文件,L

    linux查看扩展名命令?

    linux查看扩展名命令?,工作,系统,地址,信息,软件,文件,标准,电脑,命令,目录,L

    linux命令支持通配符?

    linux命令支持通配符?,工具,系统,命令,灵活,较大,名称,名字,环境,数字,文件,L

    linux常用命令文档?

    linux常用命令文档?,工作,系统,地址,管理,网络,命令,信息,目录,操作,文件,lin

    linux命令设置扩展屏?

    linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示

    linux打开文档命令?

    linux打开文档命令?,密码,图片,系统,标准,命令,文件,终端,发行,信息,情况,Lin

    linux支持管道的命令?

    linux支持管道的命令?,通信,标准,系统,信息,地方,数据,管道,环境,设备,工具,L

    linux磁盘扩展命令?

    linux磁盘扩展命令?,在线,信息,扩大,风险,磁盘,虚拟机,容量,分区,目录,链接,L

    linux进入文档命令?

    linux进入文档命令?,工作,地址,图片,系统,标准,命令,信息,设备,一致,发行,Lin

    linux上传文档命令?

    linux上传文档命令?,服务,工具,密码,系统,软件,工作,电脑,综合,命令,文件,Lin

    linux中扩展命令缩写?

    linux中扩展命令缩写?,网络,命令,信息,工作,管理,暂停,基础,公司,半导体,时

    linux如何命令建文档?

    linux如何命令建文档?,时间,名字,文件,系统,新增,命令,文件名,密码,工作,目

    linux怎么改扩展命令?

    linux怎么改扩展命令?,网络,密码,情况,软件,通用,地址,中心,环境,分区,根目

    linux命令打开文档?

    linux命令打开文档?,系统,软件,图片,电脑,一致,环境,名称,发行,中心,官方网

    linux剪切文档命令是?

    linux剪切文档命令是?,标准,系统,数据,文件,命令,地方,第一,位置,电子,名字,l

    linux简单的文档命令?

    linux简单的文档命令?,系统,地址,标准,工作,命令,数据,管理,时间,信息,单位,l

    linux查询文档命令?

    linux查询文档命令?,工作,地址,标准,命令,管理,信息,文件,目录,内容,终端,lin

    linux文档常用命令?

    linux文档常用命令?,系统,工作,地址,管理,命令,信息,基础,目录,常用命令,文

    linux扩展逻辑卷命令?

    linux扩展逻辑卷命令?,管理,系统,环境,信息,工作,位置,时间,网络,平均,基础,L