我想获得一个文件这些属性作为整数值。
Delphians倾向于喜欢FindFirst方法(SearchRec结构有一些),但是我建议使用Win32 API函数GetFileAttributesEx。
尝试
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;
function GetFileModDate(filename : string) : TDateTime; var F : TSearchRec; begin FindFirst(filename,faAnyFile,F); Result := F.TimeStamp; //if you really wanted an Int, change the return type and use this line: //Result := F.Time; FindClose(F); end;
F.Time已经被弃用,帮助文件说使用F.TimeStamp。
只是为了更新这个由于更高版本的德尔福
你可以调用GetFileInformationByHandle的 winapi函数。 另外, JCL还有一个你也可以使用的GetFileLastWrite函数
System.IOUtils确实有TFile记录与获取文件时间的几个函数,例如GetCreationTime,GetLastAccessTime,GetLastWriteTime