⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zibcompressor.pas

📁 手机批发商进销存管理
💻 PAS
字号:
{*******************************************************}
{                                                       }
{    Runtime Library                                    }
{                                                       }
{    Program By RogerDai  Email: RogerDai@21cn.com      }
{                                                       }
{*******************************************************}

{***************************************************************
 *
 * 单元名称: ZibCompressor.pas
 * 单元功能: 实现对流或文件进行压缩与解压缩操作。
 * 创建日期: 2003-10-10
 * 更新历史:
 ***************************************************************}

unit ZibCompressor;

interface

uses
  Windows, Classes, SysUtils, ZLib, ZLibConst;

type
  TZibCompressor = class(TObject)
  private
    FCompressionLevel: TCompressionLevel;
  protected

  public
    constructor Create;
    destructor Destroy; override;
    procedure CompressStream(SourceStream, DestStream: TStream);
    procedure UnCompressStream(SourceStream, DestStream: TStream);
    procedure CompressFile(const SourceFileName, DestFileName: string);
    procedure UnCompressFile(const SourceFileName, DestFileName: string); 
    property CompressionLevel: TCompressionLevel read FCompressionLevel write FCompressionLevel; 
  end;

implementation

{ TZibCompressor }

constructor TZibCompressor.Create;
begin
  FCompressionLevel := clDefault;
end;

destructor TZibCompressor.Destroy;
begin

  inherited Destroy;
end;

procedure TZibCompressor.CompressStream(SourceStream, DestStream: TStream);
var
  CompressionStream: TCompressionStream;
  Count: Integer;
begin
  Count := SourceStream.Size;
  DestStream.WriteBuffer(Count, SizeOf(Count));
  CompressionStream := TCompressionStream.Create(FCompressionLevel, DestStream);
  try
    CompressionStream.CopyFrom(SourceStream, SourceStream.Size);
  finally
    CompressionStream.Free;
  end;
end;

procedure TZibCompressor.UnCompressStream(SourceStream, DestStream: TStream);
var
  DecompressionStream: TDecompressionStream;
  Count: Integer;  
begin
  SourceStream.ReadBuffer(Count, SizeOf(Count));
  DecompressionStream := TDecompressionStream.Create(SourceStream);
  try
    DestStream.CopyFrom(DecompressionStream, Count);
  finally
    DecompressionStream.Free;
  end;
end;

procedure TZibCompressor.CompressFile(const SourceFileName,
  DestFileName: string);
var
  SourceStream, DestStream: TFileStream;
begin
  SourceStream := TFileStream.Create(SourceFileName, fmOpenRead or fmShareDenyWrite);
  DestStream := TFileStream.Create(DestFileName, fmCreate);
  try
    CompressStream(SourceStream, DestStream);
    FlushFileBuffers(DestStream.Handle); 
  finally
    DestStream.Free;
    SourceStream.Free;
  end;
end;

procedure TZibCompressor.UnCompressFile(const SourceFileName,
  DestFileName: string);
var
  SourceStream, DestStream: TFileStream;
begin
  SourceStream := TFileStream.Create(SourceFileName, fmOpenRead or fmShareDenyWrite);
  DestStream := TFileStream.Create(DestFileName, fmCreate);
  try
    UnCompressStream(SourceStream, DestStream);
    FlushFileBuffers(DestStream.Handle); 
  finally
    DestStream.Free;
    SourceStream.Free;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -