procedure TForm1.Button3Click(Sender: TObject);
var
beforeMS,afterMS:TMemoryStream; {beforeMS 是要压缩的流; afterMS 是接收压缩后文件的流}
cS:TCompressionStream; {定义压缩流}
num:Integer; {原始文件大小}
begin
{第一步: 调入要压缩的文件, 并获取大小}
beforeMS:=TMemoryStream.Create;
beforeMS.LoadFromFile('F:\cc.doc');
num:=beforeMS.Size;
{第二步: 建立接收的流, 并先写入原始文件大小}
afterMS:=TMemoryStream.Create;
afterMS.Write(num,SizeOf(num));
{第三步: 压缩}
cS:=TCompressionStream.Create(clMax,afterMS); {参数1是压缩比; 参数2是接收流}
beforeMS.SaveToStream(cS); {传入要压缩的数据}
cS.Free; {压缩流 Free 后才真正完成压缩, 所以提前 Free}
{第四步: 保存}
afterMS.SaveToFile('F:\cc.press');
{第五步: 释放}
beforeMS.Free;
afterMS.Free;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
souMS,desMS:TMemoryStream;
dS:TDecompressionStream;
num:Integer;
begin
{第一步: 准要解压的文件}
souMS:=TMemoryStream.Create;
souMS.LoadFromFile('F:\cc.press');
{第二步: 读出文件压缩前的大小}
souMS.Position := 0;
souMS.ReadBuffer(num,SizeOf(num));
{第三步: 准备好要接收的流, 并设置需要的大小}
desMS:=TMemoryStream.Create;
desMS.SetSize(num);
{第四步: 解压}
dS:=TDecompressionStream.Create(souMS); {参数是要解压的流}
{第五步: 把解压后的数据读出存放到已准备好接收的流}
dS.Read(desMS.Memory^,num);
dS.Free;
{第六步: 保存}
desMS.SaveToFile('F:\jy.doc');
desMS.Free;
souMS.Free;
end;