请问如何获取一个文件的修改时间,访问时间,创建时间等信息
好像 API getfileinfomationbyhandle 可以,但怎么用.高手指点
好像 API getfileinfomationbyhandle 可以,但怎么用.高手指点
解决方案 »
- Delphi 7 如何连接SQL Server 2005,
- delphi7.0做一个小程序,数据以*CSV形式导入,绘制曲线......
- 过年了,发红包了~~一个贴不够在开~^-^
- winexec怎么不能调用move命令?
- 【板务醒目】辞去 Windows SDK/API 板斑竹职务 3/10【散分醒目】
- 难题:如何实现Web服务器的CGI功能
- onkeydown事件
- sql语句在delphi中的应用!急!!!!!!!!!
- 请问谁有<<葵花宝典>>最新版??必有重谢!!
- 当DBGRID中的某列为编辑状态时(即按下回车,光标闪动),如何让它在关闭所在窗口前转为浏览状态?
- 皮皮散分系列之七<古道>
- 皮皮散分系列之一<老树>
var
CreateFT, LastAccessFT, LastWriteFT: TFileTime;
ST: TSystemTime;
F: Integer;
begin
{ 首先要用Windows的标准API函数以读方式打开文件 }
F := CreateFile(FileName, GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if F=INVALID_HANDLE_VALUE then
begin
ShowMessage(’Can not open file!’);
Exit;
end;
{ 取文件时间 }
if GetFileTime(F, @CreateFT, @LastAccessFT, @LastWriteFT) then
begin
{ 转换为系统时间并显示 }
FileTimeToSystemTime(LastAccessFT, ST);
Label1.Caption := Format(’%d-%d-%d, %d:%d:%d’,
[ST.wYear, ST.wMonth, ST.wDay, ST.wHour, ST.wMinute,ST.wSecond]);
end;
CloseHandle(F); { 记住关闭文件 }
end;
{ 转换文件的时间格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
有了上面的函数支持,我们就可以获取一个文件的时间信息了。以下是一个简单的例子:
procdeure GetFileTime(const 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,
CovFileDate(Tp.FindData.ftCreationTime)));
{ 返回文件的创建时间 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime)));
{ 返回文件的修改时间 }
T3:=FormatDateTime(Model,Now));
{ 返回文件的当前访问时间 }
FindClose(Tp);
end;
设置文件的时间要复杂一些,这里介绍利用Delphi中的DataTimePicker组件来辅助完成这一复杂的操作。下面的例子利用了四个DataTimePicker组件来完成文件创建时间和修改时间的设置。注意:文件的访问时间用修改时间来代替。使用下面的例子时,请在您的Form上添加四个DataTimePicker组件。其中第一和第三个DataTimePicker组件中的Kind设置为dtkDate,第二个和第四个DataTimePicker组件中的Kind设置为dtkTime.procedure SetFileDateTime(const Tf:string);
{ 设置文件时间,Tf表示目标文件路径和名称 }
var
Dt1,Dt2:Integer;
Fs:TFileStream;
Fct,Flt:TFileTime;
begin
Dt1:=DateTimeToFileDate(
Trunc(Form1.DateTimePicker1.Date) + Frac(Form1.DateTimePicker2.Time));
Dt2:=DateTimeToFileDate(
Trunc(Form1.DateTimePicker3.Date) + Frac(Form1.DateTimePicker4.Time));
{ 转换用户输入在DataTimePicker中的信息 }
try
FS := TFileStream.Create(Tf, fmOpenReadWrite);
try
if DosDateTimeToFileTime(LongRec(DT1).Hi, LongRec(DT1).Lo, Fct) andLocalFileTimeToFileTime(Fct, Fct) and
DosDateTimeToFileTime(LongRec(DT2).Hi, LongRec(DT2).Lo, Flt) and
LocalFileTimeToFileTime(Flt, Flt)
then SetFileTime(FS.Handle,
@Fct, @Flt, @Flt);
{ 设置文件时间属性 }
finally
FS.Free;
end;
except
MessageDlg('日期修改操作失败!',
mtError, [mbOk], 0);
{ 因为目标文件正在被使用等原因而导致失败 }
end;
end;
以上简单介绍了文件时间属性的修改方法,请注意:修改文件时间的范围是从公元1792年9月19日开始的,上限可以达到公元2999年或更高。另外,请不要将此技术用于破坏他人文件等非正当途径。
//////////////////////////////////////////////////////////////
Function GetFileCreationTime(Const FName: String; Var cTime: TDateTime):
Boolean;
Var
fHandle: HFILE;
fStruct: _OFSTRUCT;
ftCreation: _FILETIME;
ftLastAccess: _FILETIME;
ftLastWrite: _FILETIME;
sTime: _SYSTEMTIME;
Begin
fHandle := OpenFile(PChar(FName), fStruct, OF_READ);
Result := (fHandle <> HFILE_ERROR);
If Result Then
Begin
Result := GetFileTime(fHandle, @ftCreation, @ftLastAccess,
@ftLastWrite);
If Result Then
Begin
Result := FileTimeToSystemTime(ftCreation, sTime);
cTime := SystemTimeToDateTime(sTime);
End;
_lclose(fHandle);
End;
End;