?? 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 + -