unit U_CompressionFun; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, ShlObj, cxShellCommon, cxControls, cxContainer, cxShellTreeView, cxShellListView, StdCtrls, BtnEdit, OleCtnrs, DB, ADODB,ZLib; procedure CompressionStream(var ASrcStream:TMemoryStream;ACompressionLevel:Integer = 2); procedure UnCompressionStream(var ASrcStream:TMemoryStream); implementation uses U_iniparam; //////////////////////////////////////////////////// ///////压缩流 //////////////////////////////////////////////////// procedure CompressionStream(var ASrcStream:TMemoryStream;ACompressionLevel:Integer = 2); var nDestStream:TMemoryStream; nTmpStream:TCompressionStream; nCompressionLevel:TCompressionLevel; begin ASrcStream.Position := 0; nDestStream := TMemoryStream.Create; try //级别 case ACompressionLevel of 0:nCompressionLevel := clNone; 1:nCompressionLevel := clFastest; 2:nCompressionLevel := clDefault; 3:nCompressionLevel := clMax; else nCompressionLevel := clMax; end; //开始压缩 nTmpStream := TCompressionStream.Create(nCompressionLevel,nDestStream); try ASrcStream.SaveToStream(nTmpStream); finally nTmpStream.Free;//释放后nDestStream才会有数据 end; ASrcStream.Clear; ASrcStream.LoadFromStream(nDestStream); ASrcStream.Position := 0; finally nDestStream.Clear; nDestStream.Free; end; end; //////////////////////////////////////////////////// ///////解压缩流 //////////////////////////////////////////////////// procedure UnCompressionStream(var ASrcStream:TMemoryStream); var nTmpStream:TDecompressionStream; nDestStream:TMemoryStream; nBuf: array[1..512] of Byte; nSrcCount: integer; begin ASrcStream.Position := 0; nDestStream := TMemoryStream.Create; nTmpStream := TDecompressionStream.Create(ASrcStream); try repeat //读入实际大小 nSrcCount := nTmpStream.Read(nBuf, SizeOf(nBuf)); if nSrcCount > 0 then nDestStream.Write(nBuf, nSrcCount); until (nSrcCount = 0); ASrcStream.Clear; ASrcStream.LoadFromStream(nDestStream); ASrcStream.Position := 0; finally nDestStream.Clear; nDestStream.Free; nTmpStream.Free; end; end; end.