procedure CompressFile(FileName:string;Extension:String;
const CompressionLevel: TCompressionLevel);
var
SrcStream :TFileStream;
TmpStream :TMemoryStream;
DstStream :TFileStream;
CompStream :TCompressionStream;
Buffer :PChar;
rSize,CompSize :Integer;
begin
if not FileExists(FileName) then
raise Exception.Create(MyRs_NotFindFile); //读取这个文件,没有则调用错误类
SrcStream := TFileStream.Create(FileName,fmOpenRead); //创建SrcStream 的文件流 ,用于
TmpStream := TMemoryStream.Create; // 创建TmpStream 的内存流
DstStream := TFileStream.Create(ChangeFileExt(FileName,Extension),fmCreate); //将建.xxm的文件
GetMem(Buffer,BlockNum*B);
try
rSize := SrcStream.Read(Buffer^,BlockNum*B);
while rSize > 0 do
begin
CompStream := TCompressionStream.Create(CompressionLevel,TmpStream);
try
CompStream.WriteBuffer(Buffer^,rSize);
finally
CompStream.Free;
end;
CompSize := TmpStream.Size;
DstStream.Write(rSize,SizeOf(rSize));
DstStream.Write(CompSize,SizeOf(CompSize));
DstStream.CopyFrom(TmpStream,0);
TmpStream.Clear;
rSize := SrcStream.Read(Buffer^,B*BlockNum);
end;
finally
DstStream.Free;
TmpStream.Free;
SrcStream.Free;
FreeMem(Buffer);
end;
end;能不能解释一下这个压缩算法,并给出解压的代码
const CompressionLevel: TCompressionLevel);
var
SrcStream :TFileStream;
TmpStream :TMemoryStream;
DstStream :TFileStream;
CompStream :TCompressionStream;
Buffer :PChar;
rSize,CompSize :Integer;
begin
if not FileExists(FileName) then
raise Exception.Create(MyRs_NotFindFile); //读取这个文件,没有则调用错误类
SrcStream := TFileStream.Create(FileName,fmOpenRead); //创建SrcStream 的文件流 ,用于
TmpStream := TMemoryStream.Create; // 创建TmpStream 的内存流
DstStream := TFileStream.Create(ChangeFileExt(FileName,Extension),fmCreate); //将建.xxm的文件
GetMem(Buffer,BlockNum*B);
try
rSize := SrcStream.Read(Buffer^,BlockNum*B);
while rSize > 0 do
begin
CompStream := TCompressionStream.Create(CompressionLevel,TmpStream);
try
CompStream.WriteBuffer(Buffer^,rSize);
finally
CompStream.Free;
end;
CompSize := TmpStream.Size;
DstStream.Write(rSize,SizeOf(rSize));
DstStream.Write(CompSize,SizeOf(CompSize));
DstStream.CopyFrom(TmpStream,0);
TmpStream.Clear;
rSize := SrcStream.Read(Buffer^,B*BlockNum);
end;
finally
DstStream.Free;
TmpStream.Free;
SrcStream.Free;
FreeMem(Buffer);
end;
end;能不能解释一下这个压缩算法,并给出解压的代码
解决方案 »
- InternetReadFile获取的数据用指针存储
- 我知道我菜 我也不好意思把菜的问题提到这里 。。。
- 如何使数据库“联机”???
- 新手问题7:在ADO下哪种索引查询方式最好?
- 如何获取当前查找的数据的总纪录数?
- 天可怜见!怎样实现dbnavigator的功能?(修改当前记录)
- 请问各位,如何自己制作vsf样式文件呢?
- @@@@@@@@@@@@@@to zswang(伴水)(被黑中) 师傅,在不在啊~~~~~~~~~@@@@@@@@@@@@@@@@@@@@
- 请问在程序中怎样设置屏幕分辨率?参与有分。
- 开发符合中国人使用习惯的报表处理模块,请高手提供编程思路
- 高分帮我的小孩起个名字!
- 为什么用idhttp登陆淘宝网站,都是返回首页,登陆不了?
http://www.pcppc.cn/kaifa/Delphi/kaifa_118915.html