获取的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 }