程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 關於 Delphi 中流的使用(7) 壓縮與解壓縮(TCompressionStream、

關於 Delphi 中流的使用(7) 壓縮與解壓縮(TCompressionStream、

編輯:Delphi

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. 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved