Delphi 7zip 示例调用7z.dll 压缩及解压.7z文件

2022-12-14 09:36:08 作者:admin

本文整理自网络,侵删。

 其中源码只包含sevenzip.pas一个单元,源码中readme.htm给出了简单示例。
主要代码如下,在Win7+Delphi XE 3 下调试通过:unit Form_Main; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,  System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls; type  TFormMain = class(TForm)    memoOutput: TMemo;    btnAddFiles: TButton;    btnCompress: TButton;    btnExtract: TButton;    OpenDialog: TOpenDialog;    ProgressBar: TProgressBar;    procedure btnAddFilesClick(Sender: TObject);    procedure btnCompressClick(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure btnExtractClick(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  FormMain: TFormMain; implementation {$R *.dfm} uses sevenzip; function ProgressCallback(Sender: Pointer; total: boolean; value: int64)  : HRESULT; stdcall;begin  if total then    FormMain.ProgressBar.Max := value  else    FormMain.ProgressBar.Position := value;  Result := S_OK;end; procedure TFormMain.btnAddFilesClick(Sender: TObject);var  Counter: Integer;begin  if OpenDialog.Execute(Handle) then  begin    for Counter := 0 to OpenDialog.Files.Count - 1 do    begin      memoOutput.Lines.Append(OpenDialog.Files[Counter]);    end;  end;end; procedure TFormMain.btnCompressClick(Sender: TObject);var  Arch: I7zOutArchive;  Counter: Integer;begin  if OpenDialog.Files.Count = 0 then  begin    ShowMessage('请添加文件');    Exit;  end;  memoOutput.Lines.Append('开始压缩');  Arch := CreateOutArchive(CLSID_CFormat7z);  Arch.SetProgressCallback(nil, ProgressCallback);  for Counter := 0 to OpenDialog.Files.Count - 1 do    Arch.AddFile(OpenDialog.Files[Counter],      ExtractFileName(OpenDialog.Files[Counter]));  SetCompressionLevel(Arch, 5);  SevenZipSetCompressionMethod(Arch, T7zCompressionMethod.m7Deflate64);  Arch.SaveToFile('.\test.7z');  memoOutput.Lines.Append('完成压缩');  Arch := nil;end; procedure TFormMain.btnExtractClick(Sender: TObject);var  Arch: I7zInArchive;  Counter: Integer;begin  if not FileExists('.\test.7z') then  begin    ShowMessage('请先成生压缩文件');    Exit;  end;  memoOutput.Lines.Append('开始解压缩');  Arch := CreateInArchive(CLSID_CFormat7z);  Arch.SetProgressCallback(nil, ProgressCallback);  Arch.OpenFile('.\test.7z');  for Counter := 0 to Arch.NumberOfItems - 1 do  begin    if not Arch.ItemIsFolder[Counter] then      memoOutput.Lines.Append('包含文件:' + Arch.ItemPath[Counter]);  end;  if ForceDirectories('.\Extract') then  begin    Arch.ExtractTo('.\Extract');    memoOutput.Lines.Append('完成解压缩');    Arch := nil;  end  else    ShowMessage('无法解压到指定目录');end; procedure TFormMain.FormCreate(Sender: TObject);begin  OpenDialog.Options := [ofReadOnly, ofAllowMultiSelect];end; end.
源码下载1:https://pan.baidu.com/s/1rEYs7HR6sp30IyXm4Myo5Q 提取码: gaki 

备用源码下载2:https://sn9.us/file/758954-16566202――――――――――――――――原文链接:https://blog.csdn.net/MaxWoods/article/details/8574290

相关阅读 >>

Delphi实现webservice带身份认证的数据传输

Delphi xe7实现的登录窗体的正确用法示例

Delphi emptyrecycle() 清空回收站

windows7下使用Delphi7的方法

Delphi xe安装2010版控件

Delphi 关于禁止程序重复启动的另一种需要与实现

Delphi android / ios应用程序中使用tgeocoder类进行反向地理编码(从位置信息中获取地址)

Delphi 的 tstringbuilder 可以完美实现jave ,c#的tstringbuilder功能

Delphi win32_networkadapter 网卡 参数说明

Delphi 以二进制方式读取图片保存到string

更多相关阅读请进入《Delphi》频道 >>



在线咨询 拨打电话