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

转载 2016年06月02日 10:48:33
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.

相关文章推荐

利用VCLZip实现分卷压缩

 function Zip(ZipMode,PackSize:Integer;ZipFile,UnzipDir:String):Boolean; //压缩或解压缩文件 var zipe...

7Z插件(7z.dll)的DLL接口

//This API use the 7-zip dll (7z.dll) to read and write all 7-zip supported archive formats. //- ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Linux 7z,tar解压缩 使用

1.解压一个文件并解包 如图: 7z x -so -o/home/qian/coded VimLite-498.tar.bz2 |tar x --directory ~/coded ...

7zip 压缩(LzmaCompress)解压缩 (LzmaUncompress) 函数使用

在C目录中有算法文件,进入Util\LzmaLib目录,编译生成LIB库,导出了以下两函数,LzmaCompress 为压缩函数,LzmaUncompress 为解压缩函数。 MY_STDAPI...

C#:SevenZipSharp使用7z.dll来进行压缩与解压缩

源程序及演示程序下载地址: 【北方网通】    【电信网通】 【下载说明】 1 点击上面的地址,打开下载页面 2 点击"普通下载"--等待30秒--点击"下载"按钮--保存 程序运行截图如...

Java使用sevenzipjbind解压缩7z压缩包

使用sevenzipjbind解压缩7z压缩文件。

使用7z完成文件压缩与解压缩

/** * * 使用7z进行压缩解压的工具类 * * Copyright: All Rights Reserved (c) 2015-2016 * Company:Travelsky ...

delphi 制作的(.rar)解压缩工具

  • 2008年11月29日 11:13
  • 292KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
举报原因:
原因补充:

(最多只允许输入30个字)