346 lines
10 KiB
ObjectPascal
346 lines
10 KiB
ObjectPascal
|
|
unit U_FileAutoUpdate;
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
|
|||
|
|
function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
|
|||
|
|
function ExportFtErpFile10(mFileName:string;ADORead:TADOQuery):boolean;
|
|||
|
|
procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
|
|||
|
|
function CovFileDate(Fd:_FileTime):TDateTime;
|
|||
|
|
procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
|
|||
|
|
implementation
|
|||
|
|
uses
|
|||
|
|
U_CompressionFun;
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
///////////////////////////////////////////////////////
|
|||
|
|
function ExportFtErpFile10(mFileName:string;ADORead:TADOQuery):boolean;
|
|||
|
|
var
|
|||
|
|
Stream : TMemoryStream;
|
|||
|
|
ff:TADOBlobstream;
|
|||
|
|
mfileSize:integer;
|
|||
|
|
mCreationTime:TdateTime;
|
|||
|
|
mWriteTime:TdateTime;
|
|||
|
|
IsFileHas:boolean;
|
|||
|
|
mChildPath:string;
|
|||
|
|
mFilePath:string;
|
|||
|
|
begin
|
|||
|
|
try
|
|||
|
|
result:=false;
|
|||
|
|
mChildPath:='';
|
|||
|
|
///////////////////////////////////////////////
|
|||
|
|
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select FilePath ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
Open;
|
|||
|
|
if RecordCount>0 then
|
|||
|
|
begin
|
|||
|
|
// if not fieldByName('valid').AsBoolean then exit;
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|||
|
|
mFilePath:= ExtractFilePath(Paramstr(0))+mChildPath;
|
|||
|
|
IsFileHas:= FileExists(mFilePath+mFileName);
|
|||
|
|
if IsFileHas then
|
|||
|
|
begin
|
|||
|
|
//////////////////////////
|
|||
|
|
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
|||
|
|
GetFileInfo(mFilePath+mFileName,mfileSize,mCreationTime,mWriteTime);
|
|||
|
|
end;
|
|||
|
|
//////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
if IsFileHas then
|
|||
|
|
begin
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select count(FileName) as cnt ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
// sql.Add('and fileEditDate>'''+formatDateTime('yyyy-MM-dd hh:mm',mWriteTime)+'''');
|
|||
|
|
sql.Add(' and DATEDIFF(minute,'+ quotedStr(formatDateTime('yyyy-MM-dd hh:mm',mWriteTime))+',fileEditDate)>0');
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD>
|
|||
|
|
if fieldByName('cnt').AsInteger>0 then
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select * ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
exit;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
end
|
|||
|
|
//////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select * ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
if recordCount>0 then
|
|||
|
|
begin
|
|||
|
|
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
exit;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if ff<>nil then
|
|||
|
|
begin
|
|||
|
|
try
|
|||
|
|
mfileName:=trim(ADORead.fieldByName('FileName').asString);
|
|||
|
|
if not DirectoryExists(ExtractFileDir(mFilePath+mfileName)) then
|
|||
|
|
ForceDirectories(ExtractFileDir(mFilePath+mfileName));
|
|||
|
|
Stream:= TMemoryStream.Create ;
|
|||
|
|
//OleContainer1.SaveToStream(Stream);
|
|||
|
|
//ADOQuery1FileContent.SaveToFile('tmp'); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>
|
|||
|
|
//OleContainer1.LoadFromFile('tmp'); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡOLE<4C><45><EFBFBD><EFBFBD>
|
|||
|
|
ff.SaveToStream(Stream);
|
|||
|
|
CompressionStream(Stream); //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
|
//OleContainer1.SaveToFile(ExtractFilePath(Paramstr(0))+mfielName)
|
|||
|
|
Stream.SaveToFile(mFilePath+mfileName); //+'\tmpFile\'
|
|||
|
|
|
|||
|
|
//OleContainer1.SaveToFile('tmp');
|
|||
|
|
finally
|
|||
|
|
Stream.Free ;
|
|||
|
|
ff.free;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
UpdateFileTime(mFilePath+mfileName,ADORead.fieldByName('FileCreateDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime);
|
|||
|
|
Result:=true;
|
|||
|
|
except
|
|||
|
|
application.MessageBox(pchar('<27><>ȡ<EFBFBD>ļ<EFBFBD>'+mfileName+'ʧ<><CAA7>!'),'<27><>ʾ<EFBFBD><CABE>Ϣ',0);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
///////////////////////////////////////////////////////
|
|||
|
|
function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
|
|||
|
|
var
|
|||
|
|
Stream : TMemoryStream;
|
|||
|
|
ff:TADOBlobstream;
|
|||
|
|
mfileSize:integer;
|
|||
|
|
mCreationTime:TdateTime;
|
|||
|
|
mWriteTime:TdateTime;
|
|||
|
|
IsFileHas:boolean;
|
|||
|
|
mChildPath:string;
|
|||
|
|
mFilePath:string;
|
|||
|
|
begin
|
|||
|
|
try
|
|||
|
|
result:=false;
|
|||
|
|
mChildPath:='';
|
|||
|
|
///////////////////////////////////////////////
|
|||
|
|
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select FilePath ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
Open;
|
|||
|
|
if RecordCount>0 then
|
|||
|
|
begin
|
|||
|
|
// if not fieldByName('valid').AsBoolean then exit;
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|||
|
|
mFilePath:= ExtractFilePath(Paramstr(0))+mChildPath;
|
|||
|
|
IsFileHas:= FileExists(mFilePath+mFileName);
|
|||
|
|
if IsFileHas then
|
|||
|
|
begin
|
|||
|
|
//////////////////////////
|
|||
|
|
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
|||
|
|
GetFileInfo(mFilePath+mFileName,mfileSize,mCreationTime,mWriteTime);
|
|||
|
|
end;
|
|||
|
|
//////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
if IsFileHas then
|
|||
|
|
begin
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select count(FileName) as cnt ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
// sql.Add('and fileEditDate>'''+formatDateTime('yyyy-MM-dd hh:mm',mWriteTime)+'''');
|
|||
|
|
sql.Add(' and DATEDIFF(minute,'+ quotedStr(formatDateTime('yyyy-MM-dd hh:mm',mWriteTime))+',fileEditDate)>0');
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD>
|
|||
|
|
if fieldByName('cnt').AsInteger>0 then
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select * ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
exit;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
end
|
|||
|
|
//////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
with ADORead do
|
|||
|
|
begin
|
|||
|
|
close;
|
|||
|
|
sql.Clear ;
|
|||
|
|
sql.Add('select * ');
|
|||
|
|
sql.Add('from RT_FileUpdate');
|
|||
|
|
sql.Add('where FileName='+quotedStr(mFileName));
|
|||
|
|
Open;
|
|||
|
|
|
|||
|
|
if recordCount>0 then
|
|||
|
|
begin
|
|||
|
|
ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
exit;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if trim(fieldByName('FilePath').AsString)<>'' then
|
|||
|
|
mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
if ff<>nil then
|
|||
|
|
begin
|
|||
|
|
try
|
|||
|
|
mfileName:=trim(ADORead.fieldByName('FileName').asString);
|
|||
|
|
if not DirectoryExists(ExtractFileDir(mFilePath+mfileName)) then
|
|||
|
|
ForceDirectories(ExtractFileDir(mFilePath+mfileName));
|
|||
|
|
Stream:= TMemoryStream.Create ;
|
|||
|
|
//OleContainer1.SaveToStream(Stream);
|
|||
|
|
//ADOQuery1FileContent.SaveToFile('tmp'); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>
|
|||
|
|
//OleContainer1.LoadFromFile('tmp'); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡOLE<4C><45><EFBFBD><EFBFBD>
|
|||
|
|
ff.SaveToStream(Stream);
|
|||
|
|
//OleContainer1.SaveToFile(ExtractFilePath(Paramstr(0))+mfielName)
|
|||
|
|
Stream.SaveToFile(mFilePath+mfileName); //+'\tmpFile\'
|
|||
|
|
|
|||
|
|
//OleContainer1.SaveToFile('tmp');
|
|||
|
|
finally
|
|||
|
|
Stream.Free ;
|
|||
|
|
ff.free;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
UpdateFileTime(mFilePath+mfileName,ADORead.fieldByName('FileCreateDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime);
|
|||
|
|
Result:=true;
|
|||
|
|
except
|
|||
|
|
application.MessageBox(pchar('<27><>ȡ<EFBFBD>ļ<EFBFBD>'+mfileName+'ʧ<><CAA7>!'),'<27><>ʾ<EFBFBD><CABE>Ϣ',0);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
////////////////////////////////////////////////////////
|
|||
|
|
//
|
|||
|
|
///////////////////////////////////////////////////////
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
|
|||
|
|
procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
|
|||
|
|
var
|
|||
|
|
FileHnd : Integer;
|
|||
|
|
SysTime : TSystemTime;
|
|||
|
|
tTzi: TTimezoneInformation;
|
|||
|
|
FCreationTime, FLastAccessTime, FLastWriteTime: TFileTime;
|
|||
|
|
begin
|
|||
|
|
GetTimezoneInformation(tTzi) ;
|
|||
|
|
CreationTime := CreationTime+Ttzi.Bias/1440;
|
|||
|
|
DateTimeToSystemTime(CreationTime,SysTime);
|
|||
|
|
SystemTimeToFileTime(SysTime,FCreationTime);
|
|||
|
|
//LastAccessTime := LastAccessTime + Ttzi.Bias/1440;
|
|||
|
|
//DateTimeToSystemTime(LastAccessTime,SysTime);
|
|||
|
|
//SystemTimeToFileTime(SysTime,FLastAccessTime);
|
|||
|
|
LastWriteTime := LastWriteTime + Ttzi.Bias/1440;
|
|||
|
|
DateTimeToSystemTime(LastWriteTime,SysTime);
|
|||
|
|
SystemTimeToFileTime(SysTime,FLastWriteTime);
|
|||
|
|
try
|
|||
|
|
FileHnd := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
|
|||
|
|
SetFileTime(FileHnd, @FCreationTime, nil, @FLastWriteTime);
|
|||
|
|
finally
|
|||
|
|
FileClose(FileHnd);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end.
|