📄 unitzipmodule.pas
字号:
unit UnitZipModule;
interface
uses
SysUtils, Classes,ZLib;
type
TDataModuleZip = class(TDataModule)
private
{ Private declarations }
public
{ Public declarations }
procedure ZipFile(FileName,ZipFileName:String);
procedure UnZipFile(FileName,ZipFileName:String);
procedure CompressZip(var CompressedStream:TMemoryStream;const CompressionLevel: TCompressionLevel);
procedure UnCompressZip(const CompressedStream:
TFileStream; var CompressedStreamM: TMemoryStream);
end;
var
DataModuleZip: TDataModuleZip;
implementation
{$R *.dfm}
procedure TDataModuleZip.ZipFile(FileName,ZipFileName:String);
var
CompressedStream: TMemoryStream;
begin
Try
//将压缩之后保存为自定义格式的文件
CompressedStream:= TMemoryStream.Create;
CompressedStream.LoadFromFile(FileName);
//压缩文件
CompressZip(CompressedStream,clDefault);
CompressedStream.SaveToFile(ZipFileName);
finally
CompressedStream.Free;
end;
end;
procedure TDataModuleZip.UnZipFile(FileName,ZipFileName:String);
var
CompressedStream: TFileStream;
CompressedStreamM: TMemoryStream;
Zip:TDataModuleZip;
begin
Try
//将压缩之后保存为自定义格式的文件
CompressedStream := TFileStream.Create(ZipFileName,fmOpenRead);
CompressedStreamM := TMemoryStream.Create;
//解压文件
UnCompressZip(CompressedStream,CompressedStreamM);
CompressedStreamM.SaveToFile(FileName);
finally
CompressedStream.Free;
CompressedStreamM.Free;
end;
end;
//压缩文件
procedure TDataModuleZip.CompressZip(var CompressedStream:TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
//SourceStream/中保存着原始的图像流
CompressedStream.SaveToStream(SourceStream);
//将原始进行压缩, DestStream中保存着压缩后流
SourceStream.Free;
CompressedStream.Clear;
//写入原始的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;
//解压文件
procedure TDataModuleZip.UnCompressZip(const CompressedStream:
TFileStream; var CompressedStreamM: TMemoryStream);
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin
//从被压缩的文件流中读出原始文件的尺寸
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//根据大小为将要读入的原始文件流分配内存块
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream :=TDecompressionStream.Create(CompressedStream);
Try
//将被压缩的文件流解压缩,然后存入 Buffer内存块中
SourceStream.ReadBuffer(Buffer^, Count);
//将原始文件流保存至 DestStream流中
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//复位流指针
//从 DestStream流中载入原始文件流
CompressedStreamM.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -