是否可以让FileAge精确到毫秒?

问题描述 投票:0回答:3

我正在尝试获取文件上次修改时的时间戳(精确到毫秒)。目前如果我使用:

FileAge(Filename);

我会将最后修改的日期/时间精确到一秒。例如:12:00:54。是否可以获取最后修改的日期和时间(以毫秒为单位)?

delphi
3个回答
4
投票

使用 System.IOUtils 单元中的

TFile.GetLastWriteTime
TFile.GetLastWriteTimeUtc

如果系统支持您所需的精度,那么这些函数将提供达到该精度的日期。当然,这完全取决于所使用的文件系统。


0
投票

FileAge()
有两个版本:


function FileAge(const FileName: string): Integer;

此版本已已弃用

在 Windows 上,它使用

GetFileAttributesEx()
和/或
FindFirstFile()
来检索时间戳作为
FILETIME
(其精度为 100 纳秒),然后使用以下命令将其转换为 DOS 编码的整数
FileTimeToDosDateTime()
,具有精度。

在 POSIX 上,它使用

stat()
,它返回自纪元以来经过 的时间戳。


function FileAge(const FileName: string; out FileDateTime: TDateTime; FollowLink: Boolean = True): Boolean;

在 Windows 上,它检索与已弃用版本相同的时间戳,但将

FILETIME
转换为
SYSTEMTIME
,然后使用
毫秒
精度转换为 TDateTime

在 POSIX 上,它使用

stat()
,因此具有 精度。


0
投票

使用 Delphi 7 和 FindFirst / TSearchRec,可以通过 TSearchRec.FindData 访问高精度时间戳。

© www.soinside.com 2019 - 2024. All rights reserved.