TurboPower Abbrevia 是一套for Embarcadero Delphi, C++Builder 程式開發工具上的壓縮軟體工具。
從Delphi 6所使用的Vclzip 無法繼續在Delphi XE2使用。
於是找到這套FREEWARE的壓縮軟體。
官網:http://sourceforge.net/projects/tpabbrevia/
下載:http://sourceforge.net/projects/tpabbrevia/files/latest/download
咦!! Delphi XE2不是有Native的壓縮軟體 TZIPFILE,但是發現java.util.zip 壓出來的zip(ZLIB格式)不行解壓縮。(希望下個版本能提供修正)
Embarcadero Bug report:TZipFile: zip extracted with 0-size files.
http://qc.embarcadero.com/wc/qcmain.aspx?da=128 顯示Zip蠻多Bug尚未解決(101/3/17 updated)
紀錄Abbrevia幾個使用壓縮及解壓縮的程式碼範例。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, AbZipper, Vcl.StdCtrls, AbUnzper,
AbUtils;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
BtnZipOne: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
BtnZipFolder: TButton;
BtnUnzip: TButton;
Label6: TLabel;
Edit6: TEdit;
Memo1: TMemo;
procedure BtnZipOneClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnZipFolderClick(Sender: TObject);
procedure BtnUnzipClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{R *.dfm}
procedure TForm1.BtnZipOneClick(Sender: TObject);
VAR
oZip: TAbZipper; // uses AbZipper
begin
{壓縮一個檔案}
oZip := TAbZipper.Create(self);
try
oZip.FileName := Edit4.Text; // 'c:\test1.zip';
// oZip.BaseDirectory := 'c:\temp\';
oZip.DeleteFiles('*.*'); // 清除zip內所有檔案
oZip.AddFiles(Edit1.Text, faAnyFile);
oZip.Save;
Memo1.Lines.Add(Edit1.Text + ' zip to ' + Edit4.Text);
finally
freeandNil(oZip);
end;
end;
procedure TForm1.BtnZipFolderClick(Sender: TObject);
VAR
oZip: TAbZipper; // uses AbZipper
begin
{壓縮一個目錄}
oZip := TAbZipper.Create(self);
try
oZip.FileName := Edit5.Text; // 'c:\test1.zip';
oZip.BaseDirectory := Edit2.Text; // 'c:\auto\
oZip.DeleteFiles('*.*'); // 清除zip內所有檔案
oZip.AddFiles('*', faAnyFile);
oZip.Save;
Memo1.Lines.Add(Edit2.Text + ' zip to ' + Edit5.Text);
finally
freeandNil(oZip);
end;
end;
procedure TForm1.BtnUnzipClick(Sender: TObject);
var
AbUnZip: TAbUnZipper; // uses AbUnzper
aPath: string;
begin
{解壓縮檔案}
AbUnZip := TAbUnZipper.Create(nil);
try
//unzip 包含路徑也一併解
AbUnZip.ExtractOptions := oAbUnZipper.ExtractOptions +[eoRestorePath];
AbUnZip.FileName := Edit3.Text; // c:\test3.zip
aPath := Edit6.Text; // 'c:\temp\a1\';
AbUtils.AbCreateDirectory(aPath); // 不會自己建目錄,須自己來 uses AbUtils
AbUnZip.BaseDirectory := aPath; // set BaseDirectory 若目錄不存在會報錯
AbUnZip.ExtractFiles('*.*');
Memo1.Lines.Add(Edit3.Text + ' unzip to ' + Edit6.Text);
finally
freeandNil(AbUnZip);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
end.

