📄 zibcompressor.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 + -