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); procedure GetFileInfo(mFile: string; var mfileSize: integer; var CreationTime: tdatetime; var WriteTime: tdatetime); function CovFileDate(Fd: _FileTime): TDateTime; implementation procedure GetFileInfo(mFile: string; var mfileSize: integer; var CreationTime: tdatetime; var WriteTime: tdatetime); var vSearchRec: TSearchRec; begin FindFirst(mFile, faAnyFile, vSearchRec); mfileSize := vSearchRec.Size; CreationTime := CovFileDate(vSearchRec.FindData.ftCreationTime); //创建时间 //vSearchRec.FindData.ftLastAccessTime//访问时间 WriteTime := CovFileDate(vSearchRec.FindData.ftLastWriteTime); //修改时间 FindClose(vSearchRec); end; function CovFileDate(Fd: _FileTime): TDateTime; var Tct: _SystemTime; Temp: _FileTime; begin FileTimeToLocalFileTime(Fd, Temp); FileTimeToSystemTime(Temp, Tct); CovFileDate := SystemTimeToDateTime(Tct); end; //////////////////////////////////////////////////// ///////压缩流 //////////////////////////////////////////////////// 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.