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

關於 Delphi 中流的使用(8) 壓縮與解壓縮的函數

編輯: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; 
 
//壓縮函數 
procedure Zip(var fs: TMemoryStream); 
var 
 cs: TCompressionStream; 
 ms: TMemoryStream; 
 num: Integer; 
begin 
 if not(Assigned(fs) and (fs.Size>0)) then Exit; 
 
  num := fs.Size; 
  ms := TMemoryStream.Create; 
  cs := TCompressionStream.Create(clMax, ms); 
 try 
  fs.SaveToStream(cs); 
  cs.Free; 
  //ms.Position := 0; 
  fs.Clear; 
  fs.WriteBuffer(num, sizeof(num)); 
  fs.CopyFrom(ms, 0); 
 finally 
  ms.Free; 
 end; 
end; 
 
//解壓函數 
procedure UnZip(var fs: Tmemorystream); 
var 
 ds: TDecompressionStream; 
 ms: TMemoryStream; 
 num: Integer; 
begin 
 if not(Assigned(fs) and (fs.Size>0)) then Exit; 
 
 fs.Position := 0; 
 fs.ReadBuffer(num,sizeof(num)); 
 ms := TMemoryStream.Create; 
 ds := TDecompressionStream.Create(fs); 
 try 
  ms.SetSize(num); 
  ds.Read(ms.Memory^, num); 
  //ms.Position := 0; 
  fs.Clear; 
  fs.CopyFrom(ms, 0); 
 finally 
  ds.Free; 
  ms.Free; 
 end; 
end; 
 
 
//壓縮測試 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 ms: TMemoryStream; 
begin 
 ms := TMemoryStream.Create; 
 ms.LoadFromFile('c:\temp\test.txt'); 
 Zip(ms); 
 ms.SaveToFile('c:\temp\test.zipx'); 
end; 
 
//解壓測試 
procedure TForm1.Button2Click(Sender: TObject); 
var 
 ms: TMemoryStream; 
begin 
 ms := TMemoryStream.Create; 
 ms.LoadFromFile('c:\temp\test.zipx'); 
 UnZip(ms); 
 ms.SaveToFile('c:\temp\test2.txt'); 
end; 
 
end. 


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