当前位置:首页 > Windows程序 > 正文

关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionS

2021-05-24 Windows程序

标签:

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.

关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70364.html