【发布时间】:2010-09-13 18:05:18
【问题描述】:
我想将这些属性作为整数值获取文件。
【问题讨论】:
-
为什么是整数,TDateTime 有什么问题?
我想将这些属性作为整数值获取文件。
【问题讨论】:
Delphians 倾向于喜欢 FindFirst 方法(SearchRec 结构有一些),但我建议使用 Win32 API 函数 GetFileAttributesEx。
【讨论】:
您可以调用GetFileInformationByHandle winapi 函数。 Aparently JCL 有一个 GetFileLastWrite 函数,你也可以使用
【讨论】:
试试
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
来自 SysUtils。
【讨论】:
FileAge() 获取文件的创建日期,而不是最后修改日期。
_WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime
来自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。
只是为了更新这个由于更高版本的Delphi
【讨论】:
System.IOUtils 确实有一个 TFile 记录,其中包含几个用于获取文件年龄的函数,例如GetCreationTime、GetLastAccessTime、GetLastWriteTime
【讨论】: