?? zlib_delphi.txt
字號:
不需要任何VCL元件,也不需任何DLL檔,
採用zlib來做檔案的壓縮與解壓!
感謝ccchen提供相關資料!
使用此兩個函數之前要uses zlib
uses zlib;
// 將SrcFile壓縮並存檔為DestFile
function CompressFile(const SrcFile,DestFile:String):Boolean;
const Level: TCompressionLevel=clDefault;
var
des:TMemoryStream;
sou:TMemoryStream;
cs: TCompressionStream;
Count: Integer;
ret:boolean;
begin
ret:=false;
des:=TMemoryStream.Create;
sou:= TMemoryStream.Create;
cs:=TCompressionStream.Create(level,des);
try
sou.LoadFromFile(SrcFile);
Count:=sou.Size;
sou.SaveToStream(cs);
cs.Free;
sou.Clear;
sou.WriteBuffer(Count, SizeOf(Count));
sou.CopyFrom(des,0);
des.Clear;
des.Seek(0,soFromBeginning);
des.CopyFrom(sou,0);
des.SaveToFile(DestFile);
ret:=true;
finally
des.Free;
sou.Free;
result:=ret;
end;
end;
// 將SrcFile壓縮檔壓縮並存檔為DestFile
function DeCompressFile(const SrcFile,DestFile:String):boolean;
var
des:TFileStream;
sou:TMemoryStream;
decs: TDeCompressionStream;
Buffer: PChar;
Count: integer;
ret:boolean;
begin
Buffer:=nil;
ret:=false;
des:=TFileStream.Create(DestFile,fmCreate);
sou:= TMemoryStream.Create;
decs:=nil;
try
sou.LoadFromFile(SrcFile);
sou.Seek(0,soFromBeginning);
sou.ReadBuffer(count,sizeof(count));
GetMem(Buffer, Count);
decs:=TDeCompressionStream.Create(sou);
decs.ReadBuffer(Buffer^, Count);
Des.WriteBuffer(Buffer^, Count);
Des.Position := 0;
ret:=true;
finally
FreeMem(Buffer);
decs.Free;
des.Free;
sou.Free;
result:=ret;
end;
end;
~~~Delphi K.Top討論區站長~~~
------~~~Delphi K.Top討論區站長~~~
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -