判断两个文件修改日期是否一致,不一致则运行指定程序.该怎么处理
判断两个文件修改日期是否一致,不一致则运行指定程序.
下面的代码实现标题所写的功能,可现在有一个问题,同样的程序,放不局域网上两台不同的机器,有一台电脑在两个文件修改日期一致的情况下,也要运行指定的程序.不知道为什么,另一台电脑没这个问题,只是在修改日期不同的时候才运行指定的程序.
解决问题者,给100分.
TextFilePath:=ExtractFilePath(Application.ExeName)+ '\copyexe.exe ';
i:=1;
//判断文件是否有更新
GetFileTime( '\\chara293\fas\itat\chara.exe ');
a:=T2;
GetFileTime(PChar(ExtractFilePath(Application.ExeName)+ '\chara.exe '));
b:=T2;
//复制文件
if a <> b then
ShellExecute(0, 'open ',PChar(ChangeFileExt(TextFilePath, '.exe ')), nil, nil, SW_hide);
procedure TInitializeForm.GetFileTime(const Tf:string);
{ 获取文件时间,Tf表示目标文件路径和名称 }
const
Model= 'yyyy/mm/dd,hh:mm:ss '; { 设定时间格式 }
var
Tp:TSearchRec; { 申明Tp为一个查找记录 }
begin
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 }
T1:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftCreationTime));
{ 返回文件的创建时间 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now);
{ 返回文件的当前访问时间 }
FindClose(Tp);
end;
function TInitializeForm.CovFileDate(Fd:_FileTime):TDateTime;
{ 转换文件的时间格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
------解决方案--------------------
//修改一下你的GetFileTime写成一个函数,测试一下你写的函数,我这里返回结果是true证明没有什么问题,问题没有出现在这两个函数上
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
var t1,t2,t3,a,b:string;
function CovFileDate(Fd:_FileTime):TDateTime;
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
Function GetFileTime(const Tf:string):string;
{ 获取文件时间,Tf表示目标文件路径和名称 }
const
Model= 'yyyy/mm/dd,hh:mm:ss '; { 设定时间格式 }
var
Tp:TSearchRec; { 申明Tp为一个查找记录 }
begin
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 }
T1:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftCreationTime));
{ 返回文件的创建时间 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now);
{ 返回文件的当前访问时间 }
FindClose(Tp);
Result:=T2;
end;
begin
if GetFileTime( 'd:\123\123.JPG ') = GetFileTime( 'd:\123\123.JPG ') then
writeln( 'true ' )
else
writeln( 'false ' );
end.
------解决方案--------------------
获取时间出错了吧
------解决方案--------------------
t2 是全局变量?封装的不好,而且如果只是要比较没有必要搞成string,还要去格式化他的格式
------解决方案--------------------
没有什么问题,设计的不合理
如果你将GetFileTime修改成LoadFileTime,然后将t1,t2,t3写成属性,估计就没有人说你了
------解决方案--------------------
那就给分吧,哈哈
下面的代码实现标题所写的功能,可现在有一个问题,同样的程序,放不局域网上两台不同的机器,有一台电脑在两个文件修改日期一致的情况下,也要运行指定的程序.不知道为什么,另一台电脑没这个问题,只是在修改日期不同的时候才运行指定的程序.
解决问题者,给100分.
TextFilePath:=ExtractFilePath(Application.ExeName)+ '\copyexe.exe ';
i:=1;
//判断文件是否有更新
GetFileTime( '\\chara293\fas\itat\chara.exe ');
a:=T2;
GetFileTime(PChar(ExtractFilePath(Application.ExeName)+ '\chara.exe '));
b:=T2;
//复制文件
if a <> b then
ShellExecute(0, 'open ',PChar(ChangeFileExt(TextFilePath, '.exe ')), nil, nil, SW_hide);
procedure TInitializeForm.GetFileTime(const Tf:string);
{ 获取文件时间,Tf表示目标文件路径和名称 }
const
Model= 'yyyy/mm/dd,hh:mm:ss '; { 设定时间格式 }
var
Tp:TSearchRec; { 申明Tp为一个查找记录 }
begin
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 }
T1:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftCreationTime));
{ 返回文件的创建时间 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now);
{ 返回文件的当前访问时间 }
FindClose(Tp);
end;
function TInitializeForm.CovFileDate(Fd:_FileTime):TDateTime;
{ 转换文件的时间格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
------解决方案--------------------
//修改一下你的GetFileTime写成一个函数,测试一下你写的函数,我这里返回结果是true证明没有什么问题,问题没有出现在这两个函数上
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
var t1,t2,t3,a,b:string;
function CovFileDate(Fd:_FileTime):TDateTime;
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
Function GetFileTime(const Tf:string):string;
{ 获取文件时间,Tf表示目标文件路径和名称 }
const
Model= 'yyyy/mm/dd,hh:mm:ss '; { 设定时间格式 }
var
Tp:TSearchRec; { 申明Tp为一个查找记录 }
begin
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 }
T1:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftCreationTime));
{ 返回文件的创建时间 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now);
{ 返回文件的当前访问时间 }
FindClose(Tp);
Result:=T2;
end;
begin
if GetFileTime( 'd:\123\123.JPG ') = GetFileTime( 'd:\123\123.JPG ') then
writeln( 'true ' )
else
writeln( 'false ' );
end.
------解决方案--------------------
获取时间出错了吧
------解决方案--------------------
t2 是全局变量?封装的不好,而且如果只是要比较没有必要搞成string,还要去格式化他的格式
------解决方案--------------------
没有什么问题,设计的不合理
如果你将GetFileTime修改成LoadFileTime,然后将t1,t2,t3写成属性,估计就没有人说你了
------解决方案--------------------
那就给分吧,哈哈