如何在Delphi中获取文件的创建/上次修改日期?
时间:2020-03-06 14:49:54 来源:igfitidea点击:
我想获取这些属性为整数值的文件。
解决方案
Delphians倾向于使用FindFirst方法(SearchRec结构包含其中的一些方法),但是我建议使用Win32 API函数GetFileAttributesEx。
我们可以调用GetFileInformationByHandle winapi函数。显然,JCL有一个GetFileLastWrite函数,我们也可以使用
尝试
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
来自SysUtils。
从DSiWin32免费软件库中:
function DSiFileTimeToDateTime(fileTime: TFileTime; var dateTime: TDateTime): boolean; var sysTime: TSystemTime; begin Result := FileTimeToSystemTime(fileTime, sysTime); if Result then dateTime := SystemTimeToDateTime(sysTime); end; { DSiFileTimeToDateTime } function DSiGetFileTimes(const fileName: string; var creationTime, lastAccessTime, lastModificationTime: TDateTime): boolean; var fileHandle : cardinal; fsCreationTime : TFileTime; fsLastAccessTime : TFileTime; fsLastModificationTime: TFileTime; begin Result := false; fileHandle := CreateFile(PChar(fileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if fileHandle <> INVALID_HANDLE_VALUE then try Result := GetFileTime(fileHandle, @fsCreationTime, @fsLastAccessTime, @fsLastModificationTime) and DSiFileTimeToDateTime(fsCreationTime, creationTime) and DSiFileTimeToDateTime(fsLastAccessTime, lastAccessTime) and DSiFileTimeToDateTime(fsLastModificationTime, lastModificationTime); finally CloseHandle(fileHandle); end; end; { DSiGetFileTimes }
这应该可以工作,并且是本机的Delphi代码。
function GetFileModDate(filename : string) : integer; var F : TSearchRec; begin FindFirst(filename,faAnyFile,F); Result := F.Time; //if you wanted a TDateTime, change the return type and use this line: //Result := FileDateToDatetime(F.Time); FindClose(F); end;