fs.stat(path[, options], callback)


异步 stat(2)。回调函数接受两个参数 (err, stats),其中 stats 是一个 <fs.Stats> 对象。

【Asynchronous stat(2). The callback gets two arguments (err, stats) where stats is an <fs.Stats> object.】

如果发生错误,err.code 将是 常见系统错误 中的一个。

【In case of an error, the err.code will be one of Common System Errors.】

fs.stat() 会跟随符号链接。使用 fs.lstat() 来查看链接本身。

在调用 fs.open()fs.readFile()fs.writeFile() 之前使用 fs.stat() 来检查文件是否存在是不推荐的。相反,用户代码应直接打开/读取/写入文件,并处理文件不可用时引发的错误。

【Using fs.stat() to check for the existence of a file before calling fs.open(), fs.readFile(), or fs.writeFile() is not recommended. Instead, user code should open/read/write the file directly and handle the error raised if the file is not available.】

如果只想检查文件是否存在而不进行后续操作,建议使用 fs.access()

【To check if a file exists without manipulating it afterwards, fs.access() is recommended.】

例如,给定以下目录结构:

【For example, given the following directory structure:】

- txtDir
-- file.txt
- app.js 

下一个程序将检查给定路径的统计信息:

【The next program will check for the stats of the given paths:】

import { stat } from 'node:fs';

const pathsToCheck = ['./txtDir', './txtDir/file.txt'];

for (let i = 0; i < pathsToCheck.length; i++) {
  stat(pathsToCheck[i], (err, stats) => {
    console.log(stats.isDirectory());
    console.log(stats);
  });
} 

结果输出将类似于:

【The resulting output will resemble:】

true
Stats {
  dev: 16777220,
  mode: 16877,
  nlink: 3,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214262,
  size: 96,
  blocks: 0,
  atimeMs: 1561174653071.963,
  mtimeMs: 1561174614583.3518,
  ctimeMs: 1561174626623.5366,
  birthtimeMs: 1561174126937.2893,
  atime: 2019-06-22T03:37:33.072Z,
  mtime: 2019-06-22T03:36:54.583Z,
  ctime: 2019-06-22T03:37:06.624Z,
  birthtime: 2019-06-22T03:28:46.937Z
}
false
Stats {
  dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214074,
  size: 8,
  blocks: 8,
  atimeMs: 1561174616618.8555,
  mtimeMs: 1561174614584,
  ctimeMs: 1561174614583.8145,
  birthtimeMs: 1561174007710.7478,
  atime: 2019-06-22T03:36:56.619Z,
  mtime: 2019-06-22T03:36:54.584Z,
  ctime: 2019-06-22T03:36:54.584Z,
  birthtime: 2019-06-22T03:26:47.711Z
}