改变文件的属性也会改变其时间戳吗?

改变文件的属性也会改变其时间戳吗?

在 Windows 8.0 中,当我更改文件的属性(例如 H 和 R)时,时间戳(创建、修改、访问)似乎保持不变。

文件属性是否实际上存储在 NTFS 文件系统中而不是文件本身中?如果更改文件的属性,时间戳难道不应该更改吗?这不被认为是修改文件吗?如果我没有记错的话,时间戳也存储在 NTFS 文件系统中,而不是文件本身中。

FAT32 文件系统和以前版本的 Windows 是否也存在这种情况?

答案1

自诞生以来,Windows NT 就支持 Win32 子系统和 POSIX 子系统。在 Win32 和 POSIX 中,文件都有三个时间戳。其中两个时间戳是 Win32 和 POSIX 所共有的。在 Win32 中,文件有创建最后写入, 和上次访问时间戳。POSIX 有上一次更改上次访问, 和I 节点已更改时间戳。

Windows NT 和 NTFS,为了同时支持 Win32 和 POSIX,因此给文件时间戳:创建、上次写入/修改、上次访问和上次更改。

在 POSIX 中,I 节点更改时间戳反映 I 节点中某些内容(权限、所有者、组等)发生更改的时间。即使更改的内容是从 Win32 更改的,Windows NT 也会设置时间戳,因为(当然)当涉及到文件时,这两个子系统都是基于本机 API 分层的。

因此,使用以下方法更改文件的属性(只读、隐藏、系统、存档、索引、脱机等):SetFileAttributes将更新其上次更改的时间戳。

它不会改变上次写入时间戳,因为该时间戳仅受文件更改的影响数据. 它是对文件的元数据在 I-node/MFT 记录中,影响上次更改的时间戳。

Windows NT 中的每个文件系统都必须向内核提供这四个时间戳。这是文件系统驱动程序必须实现的 API。

但并非所有文件系统都将其定义在磁盘数据结构中,或将其定义为与 Windows NT 内核相同的粒度。例如,FAT 文件系统格式最初只有每个文件的时间戳:其上次写入时间戳。Windows NT 的 FAT 文件系统驱动程序以及 DOS+Windows 95/98/ME 中的 FAT 文件系统驱动程序此前使用目录条目中的备用字段来存储更多时间戳。但没有足够的空间容纳所有四个。没有磁盘上的上次更改时间戳;上次访问时间戳的粒度为 1 天;上次写入和创建时间戳的粒度为 2 秒。

答案2

上一次更改date 指的是上次写入的日期。当属性改变时,它们不会影响您存储在文件中的数据,因此上一次更改保持不变。

创建日期根据定义是恒定的。上次访问是不可预测的。

但是还有另一个时间戳(在资源管理器中不可见) 称为 MFT。当您更改任何属性/特性时,MFT 当然会发生变化。

相关内容