【发布时间】:2017-09-18 10:01:33
【问题描述】:
我正在尝试编写一个文件同步应用程序,该应用程序可以在使用任何兼容文件系统的不同 Windows 机器上通用。我需要在两台机器之间同步文件之前将它们的时间戳标准化为特定的粒度,以便在同步工作完成后文件在两台不同的机器上看起来是相同的时间戳。出于我的目的,我只需要规范化文件时间戳。对于每一个需要同步的文件,我只需要将最后写入时间和创建时间标准化即可。
MSDN has this to say about the FILETIME structure and its resolution:
并非所有文件系统都可以记录创建和上次访问时间,而不是 所有文件系统都以相同的方式记录它们。例如,在新台币 FAT,创建时间有10毫秒的分辨率,写入时间有一个 分辨率2秒,访问时间分辨率1天 (真的,访问日期)。在 NTFS 上,访问时间的分辨率为 1 小时。因此,GetFileTime 函数可能不会返回相同的文件 使用SetFileTime 函数设置时间信息。此外,脂肪 以当地时间在磁盘上记录时间。但是,NTFS 记录时间 UTC 格式的磁盘。有关详细信息,请参阅文件时间。
Windows 使用 FAT、NTFS、exFAT、Live File System 和 ReFS 文件系统(最后一个仅在 视窗服务器 2012; Windows 无法从中启动)。
所以,换句话说,我的问题可以总结为:
在 FAT、NTFS、exFAT、Live File System 和 ReFS 的分组中,
- 对于文件的最后写入时间,在 Windows 中哪个分辨率最差?
- 在 Windows 中,文件创建时间的哪个分辨率最差?
我已尝试搜索,但无法找到有关这些不同 Windows 兼容文件系统之间文件时间戳分辨率差异的详细信息。
【问题讨论】:
-
为了后验性:Windows也支持NFS,可能会提供不同的分辨率。
标签: .net windows winapi visual-c++ filesystems