获取的LastAccessTime德尔福
问题描述:
我目前使用以下准则来获取文件的“的LastAccessTime”德尔福 http://www.latiumsoftware.com/en/delphi/00007.php获取的LastAccessTime德尔福
使用FindNext中,可以使用一个TSearchRec对象从中我可以访问ftLastWriteTime它的类型是TFileTime
的当将其转换为TDateTime对象(使用上面的源代码),然后输出DateTimeToString我得到的日期和时间,但小时似乎是两个数字在文件ftLastWriteTime小时值的总和。
即不但得不到2009/09/03 13:45我得到2009/09/03 04:45或 代替2009/09/03 17:45我得到2009/09/03 08:45
如有任何意见,欢迎提前致谢
答
典型的,20分钟后,我的第一篇文章,我解决了我自己的问题。
笔者到链接代码avbove有相同的代码的两个版本,第二个是这里发布http://www.latiumsoftware.com/en/delphi/00051.php
问题解决了! - 我认为DOS库对Win32时间戳的解释是不正确的,并且被延续到后面的代码中。也许不会?如果时间允许,我会进一步调查。
答
时间戳是UTC,而不是当地时间。
答
“像往常一样”;-)我会指向DSiWin32其中包括函数DSiGetFileTimes,它返回创建时间,上次访问时间和上次修改时间。
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 }