RtTool/Delphi7/开发档案/英文版/ThreeFun/Fun/U_CompressionFun.pas

115 lines
3.2 KiB
ObjectPascal
Raw Permalink Normal View History

2025-01-08 11:55:07 +08:00
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); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//vSearchRec.FindData.ftLastAccessTime//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
WriteTime := CovFileDate(vSearchRec.FindData.ftLastWriteTime); //<2F>޸<EFBFBD>ʱ<EFBFBD><CAB1>
FindClose(vSearchRec);
end;
function CovFileDate(Fd: _FileTime): TDateTime;
var
Tct: _SystemTime;
Temp: _FileTime;
begin
FileTimeToLocalFileTime(Fd, Temp);
FileTimeToSystemTime(Temp, Tct);
CovFileDate := SystemTimeToDateTime(Tct);
end;
////////////////////////////////////////////////////
///////ѹ<><D1B9><EFBFBD><EFBFBD>
////////////////////////////////////////////////////
procedure CompressionStream(var ASrcStream: TMemoryStream; ACompressionLevel: Integer = 2);
var
nDestStream: TMemoryStream;
nTmpStream: TCompressionStream;
nCompressionLevel: TCompressionLevel;
begin
ASrcStream.Position := 0;
nDestStream := TMemoryStream.Create;
try
//<2F><><EFBFBD><EFBFBD>
case ACompressionLevel of
0:
nCompressionLevel := clNone;
1:
nCompressionLevel := clFastest;
2:
nCompressionLevel := clDefault;
3:
nCompressionLevel := clMax;
else
nCompressionLevel := clMax;
end;
//<2F><>ʼѹ<CABC><D1B9>
nTmpStream := TCompressionStream.Create(nCompressionLevel, nDestStream);
try
ASrcStream.SaveToStream(nTmpStream);
finally
nTmpStream.Free; //<2F>ͷź<CDB7>nDestStream<61>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
end;
ASrcStream.Clear;
ASrcStream.LoadFromStream(nDestStream);
ASrcStream.Position := 0;
finally
nDestStream.Clear;
nDestStream.Free;
end;
end;
////////////////////////////////////////////////////
///////<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
////////////////////////////////////////////////////
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
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʴ<EFBFBD>С
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.