`

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

 
阅读更多
--------------------引自 万一 博客
 
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 中压缩流和解压流的应用

    关于Delphi中压缩流和解压流的应用,深入理解与运用这一特性对于软件开发者而言尤为重要。本文将详尽解析Delphi中的TCompressionStream和TDecompressionStream类,旨在为Delphi开发人员提供一个全面而深入的指南。 ...

    用DELPHI实现文件加密压缩

    TCompressionStream允许开发者根据不同的压缩级别(如clNone、clFastest、clDefault、clMax)进行数据压缩,而TDecompressionStream则负责解压缩已压缩的数据。 2. 数据加密 数据加密部分则利用了Delphi中的...

    Delphi数据压缩处理

    通过 TCompressionStream 和 TDecompressionStream,我们可以实现高效的文件和内存数据的压缩与解压缩,这对于处理大量数据或者优化存储空间是非常有帮助的。在实际开发中,可以根据需求调整压缩级别、选择不同的...

    用DELPHI实现文件加密压缩.docx

    - 使用了DELPHI中的TCompressionStream和TDecompressionStream这两个类来处理数据的压缩和解压缩。TCompressionStream支持不同的压缩级别,如clNone(不压缩),clFastest(快速压缩但牺牲压缩率),clDefault...

    delphi基础教程.doc

    在 Delphi 中,还提供了压缩流和解压流的应用,通过 TCompressionStream 和 TDecompressionStream 两个流类来完成数据的压缩和解压缩。这些流类位于 Delphi 的帮助中没有详细的说明,但在 Delphi 系统中提供了它们的...

    文件夹压缩和解压缩自已写的一段代码

    - 使用 `TDecompressionStream` 对压缩数据进行解压缩。 4. **还原文件**: - 根据之前记录的文件信息,将解压缩后的数据写入到相应的文件中。 5. **创建目录**: - 如果文件所在的目录不存在,则需要先创建目录...

    zlib_ZLibExGZ_ZLibEx

    在IT行业中,压缩和解压缩技术是至关...通过使用`TCompressionStream`和`TDecompressionStream`,开发者可以无缝地将压缩操作融入到他们的数据流处理流程中,无需关心底层的实现细节,从而专注于应用的核心业务逻辑。

    delphi高效数据库程序设计

    5. **压缩流和解压流**: 在Delphi中,可以使用TCompressionStream和TDDecompressionStream类来实现数据的压缩和解压缩。这些流对象可以嵌入到其他流操作中,比如读写文件或网络传输,从而实现数据的高效存储和传输。...

    在程序中压缩sql server2000的数据库备份文件的代码

    除了调用外部程序外,还可以使用Delphi自带的`TCompressionStream`和`TDecompressionStream`类来实现压缩功能。这种方式更加灵活且不依赖于外部工具。 ```delphi var mss: TMemoryStream; zip: ...

Global site tag (gtag.js) - Google Analytics