在 node.js 中,我如何知道 fs.stat() 是否会为给定的文件/路径/卷/fs 返回可用的 crtime 和/或出生时间字段?

hip*_*ail 7 filesystems timestamp cross-platform stat node.js

我最近了解到,不同的操作系统甚至同一操作系统下的不同文件系统都支持lstat.

返回的Stats对象给了我们四次,每次都有两种不同的味道。

js日期对象:

  • atime:自 POSIX Epoch 以来该文件最后一次被访问的时间以毫秒表示
  • mtime: 最后一次修改这个文件...
  • ctime: 上次更改文件状态...
  • birthtime:这个文件的创建时间

( atimeMs, mtimeMs, ctimeMs, 和birthtimeMs是上述每个的 js 日期对象版本)

“已修改”表示文件的内容通过写入等方式发生了更改。“已更改”表示文件的元数据(例如所有者和权限)已更改。

Linux 传统上从不支持出生时间的概念,但随着更多更新的文件系统确实支持它,如果我没有正确阅读,它最近已经添加了对 Linux 堆栈的所有相关层的支持。

但是 Windows 和 Mac 都像它们的原生文件系统一样支持出生时间。

另一方面,Windows 传统上不支持与文件修改分开的文件更改概念。但是为了符合 POSIX,它增加了对 API 级别和 NTFS 的支持。(尽管它似乎没有在 GUI 或命令行中的任何地方公开)。FAT fs 不支持。

当我lstat在 NTFS 驱动器上调用Windows 上的文件时,结果ctime看起来不错。当我在 FAT 驱动器上的文件上调用它时,它ctime包含垃圾。(就我而言,它始终2076-11-29T08:54:34.955Z适用于每个文件。)

我不知道这是不是一个错误。

我不知道birthtimeLinux 在不支持它的文件系统上会返回什么。希望null或者undefined但也许也是垃圾。我也不知道 Linux 或 Macctime为 FAT 卷上的文件返回什么。

那么,Node 中是否有一种方法可以获取有关给定文件/路径/fs 支持哪些功能的信息?