BOOL GetFileTime( HANDLE hFile, // identifies the file LPFILETIME lpCreationTime, // address of creation time LPFILETIME lpLastAccessTime, // address of last access time LPFILETIME lpLastWriteTime // address of last write time );
procedure TForm1.Button1Click(Sender: TObject); var l_SR: TSearchRec; begin FindFirst('C:\Windows\notepad.exe', faAnyFile, l_SR); ShowMessage(DateTimeToStr(FileDateToDateTime(l_SR.Time))); end;
LPFILETIME lpCreationTime, // address of creation time
LPFILETIME lpLastAccessTime, // address of last access time
LPFILETIME lpLastWriteTime // address of last write time
);
var
l_SR: TSearchRec;
begin
FindFirst('C:\Windows\notepad.exe', faAnyFile, l_SR);
ShowMessage(DateTimeToStr(FileDateToDateTime(l_SR.Time)));
end;
功能 返回文件的修改时间
说明 读取失败则返回-1
参考 function Windows.GetFileTime
例子
///////Begin FileGetDate
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
I := FileOpen(Edit1.Text, fmOpenRead);
if I < 0 then Exit;
SpinEdit1.Value := FileGetDate(I);
Edit2.Text := DateTimeToStr(FileDateToDateTime(SpinEdit1.Value));
FileClose(I);
end;
///////End FileGetDate
利用Delphi中的FindFirst函数可以得到一个文件的属性记录,该记录中的FindData域中就记载了详细的文件时间信息。
然而遗憾的是,FindData中的时间信息是不能直接得到的。因此,本人编写了一个转换函数来完成文件时间格式的转换
function chgfiledate(Fd:_FileTime):TDateTime;
{ 转换文件的时间格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
chgfiledate:=SystemTimeToDateTime(Tct);
end;
有了上面的函数支持,就可以获取一个文件的时间信息了。以下是一个简单的例子
procedure GetFile(Tf:string);
{ 获取文件时间,Tf表示目标文件路径和名称 }
const
Model='yyyy/mm/dd,hh:mm:ss'; { 设定时间格式 }
var
Tp:TSearchRec; { 申明Tp为一个查找记录 }
T1,T2,T3:string;
begin
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 }
T1:=FormatDateTime(Model,chgfiledate(Tp.FindData.ftCreationTime));
{ 返回文件的创建时间 }T2:=FormatDateTime(Model,chgfiledate(Tp.FindData.ftLastWriteTime));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now);
{ 返回文件的当前访问时间 }
FindClose(Tp);
showmessage(t1+' '+t2+' '+t3);
end;
var
hf:Thandle;
lpfi:TByHandleFileInformation;
filetime:string;
time:integer;
begin
hf:=fileOpen('C:\a.txt',fmOPENread); //文件句柄
GetFileInformationByHandle(hf,lpfi); //文件信息
FileTimeToDosDateTime(lpfi.ftLastWriteTime,LongRec(Time).Hi,LongRec(Time).Lo);
filetime:=datetimetostr(filedatetodatetime(Time)); //文件修改时间
end;
fileclose(hf);
不然的话就会报文件被占用的错误。
^*^