unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses Zlib; {壓縮流 TCompressionStream 與解壓縮流 TDecompressionStream 來自 Zlib 單元} //壓縮 procedure TForm1.Button1Click(Sender: TObject); var cs: TCompressionStream; {定義壓縮流} fs,ms: TMemoryStream; {fs 是要壓縮的流; ms 是接收壓縮后文件的流} num: Integer; {原始文件大小} begin {第一步: 調入要壓縮的文件, 並獲取大小} fs := TMemoryStream.Create; fs.LoadFromFile('c:\temp\test.txt'); {文件要存在啊} num := fs.Size; {第二步: 建立接收的流, 並先寫入原始文件大小} ms := TMemoryStream.Create; ms.Write(num, SizeOf(num)); {第三步: 壓縮} cs := TCompressionStream.Create(clMax, ms); {參數1是壓縮比; 參數2是接收流} fs.SaveToStream(cs); {傳入要壓縮的數據} cs.Free; {壓縮流 Free 后才真正完成壓縮, 所以提前 Free} {第四步: 保存} ms.SaveToFile('c:\temp\test.zipx'); {第五步: 釋放} ms.Free; fs.Free; {壓縮比參數: clNone 無壓縮 clFastest 快速 clDefault 默認 clMax 最大比例 } end; //解壓縮 procedure TForm1.Button2Click(Sender: TObject); var ds: TDecompressionStream; {解壓流} fs,ms: TMemoryStream; {fs 是准備要解壓的流; ms 是接受解壓數據的流} num: Integer; {接受文件壓縮前的大小} begin {第一步: 准要解壓的文件} fs := TMemoryStream.Create; fs.LoadFromFile('c:\temp\test.zipx'); {必須是上一個壓縮方法生成的文件} {第二步: 讀出文件壓縮前的大小} fs.Position := 0; fs.ReadBuffer(num,SizeOf(num)); {第三步: 准備好要接收的流, 並設置需要的大小} ms := TMemoryStream.Create; ms.SetSize(num); {第四步: 解壓} ds := TDecompressionStream.Create(fs); {參數是要解壓的流} {第五步: 把解壓后的數據讀出存放到已准備好接收的流} ds.Read(ms.Memory^, num); {第六步: 保存} ms.SaveToFile('c:\temp\test2.txt'); ds.Free; ms.Free; fs.Free; end; end.