【问题标题】:Windows-compatible filesystems' file time resolutionsWindows 兼容文件系统的文件时间分辨率
【发布时间】: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 格式的磁盘。有关详细信息,请参阅文件时间。

According to Wikipedia:

Windows 使用 FAT、NTFS、exFAT、Live File System 和 ReFS 文件系统(最后一个仅在 视窗服务器 2012; Windows 无法从中启动)。

所以,换句话说,我的问题可以总结为:

在 FAT、NTFS、exFAT、Live File System 和 ReFS 的分组中,

  1. 对于文件的最后写入时间,在 Windows 中哪个分辨率最差?
  2. 在 Windows 中,文件创建时间的哪个分辨率最差?

我已尝试搜索,但无法找到有关这些不同 Windows 兼容文件系统之间文件时间戳分辨率差异的详细信息。

【问题讨论】:

  • 为了后验性:Windows也支持NFS,可能会提供不同的分辨率。

标签: .net windows winapi visual-c++ filesystems


【解决方案1】:

我通过转到每个文件系统的文章并查找其日期分辨率找到了我的答案here

FAT8

不记录日期,在 Windows 中不受支持。

FAT12、FAT16、FAT16B 和 FAT32

其中一些在 Windows 中不受支持。

  • 上次修改时间:2 秒
  • 创建时间:10 毫秒
  • 访问时间:1 天
  • 删除时间:2 秒

exFAT

所有记录为 10 毫秒。

NTFS

所有记录为 100 ns。

实时文件系统 (UDF)

所有记录为 1 μs。

ReFS

找不到分辨率细节,但它非常现代,所以我假设大多数最坏的情况都在上面,并且目前没有多少人会使用它。或许有人发现后可以整理这篇文章。

所以,回答问题:

1.哪个文件的最后写入时间在 Windows 中的分辨率最差?

2 秒,FAT 文件系统。

2。哪个文件的创建时间在 Windows 中的分辨率最差?

10 毫秒,也是 FAT 文件系统。

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多