18

我正在尝试编写一个函数,告诉我某个路径是一个目录。

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
fs.statSync(pathname, function(err, stats) {
    console.log(stats.isDirectory());
});
console.log("+++++++++++++++++++++++++++++++++++++++");

但是,它从不打印答案。

如果路径名存在 - 它不会调用该函数。如果它不存在,它会生成一个异常:ENOENT not a file or directory. 我不想知道它存在路径名,但我想知道它是否是一个目录。

任何人都可以帮我解决它吗?

4

2 回答 2

34

您正在使用不使用回调的同步版本。它只是返回结果。所以要么使用异步表单fs.stat(path, callback),要么使用同步表单,如下所示:

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
var stats = fs.statSync(pathname);
console.log(stats.isDirectory());
console.log("+++++++++++++++++++++++++++++++++++++++");
于 2011-12-20T21:19:03.893 回答
9

fs.stat() 如何工作?

如果你想使用回调/异步 fs 函数,不要使用同步版本,使用 fs.stat() :

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
fs.stat(pathname, function(err, stats) {
    console.log(stats.isDirectory());
});
console.log("+++++++++++++++++++++++++++++++++++++++");

有更多关于fs.stat()的信息。您可以获得有关主要对象的大量信息:

fs.stat(path, function(err, stats) {
      console.log(stats)
}

输出 :

{ dev: 2049,
  ino: 305352,
  mode: 16877,
  nlink: 12,
  uid: 1000,
  gid: 1000,
  rdev: 0,
  size: 4096,
  blksize: 4096,
  blocks: 8,
  atime: '2009-06-29T11:11:55Z',
  mtime: '2009-06-29T11:11:40Z',
  ctime: '2009-06-29T11:11:40Z' }

很多元素对我们来说通常是无用的,是的。但根据这篇文章,这是所有这些变量的含义:

  • dev:包含文件的设备的ID
  • 模式:文件保护
  • nlink:文件的硬链接数
  • uid:文件所有者的用户 ID。
  • gid:文件所有者的组 ID。
  • rdev:如果文件是特殊文件,则设备 ID。
  • blksize:文件系统 I/O 的块大小。
  • ino:文件 inode 编号。inode 是一种文件系统数据结构,用于存储有关文件的信息。
  • size:文件总大小,以字节为单位。
  • blocks:为文件分配的块数。
  • atime:表示文件最后访问时间的日期对象。
  • mtime:表示文件最后修改时间的日期对象。
  • ctime:日期对象,表示文件的 inode 上次更改的时间。

您还可以像nodeJS 文档所说的那样获取更多信息,例如:

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isCharacterDevice()
stats.isFIFO()
stats.isSocket()

关于 stats.isSymbolicLink(),除了 fs.stat 之外,还有另一个函数,称为 fs.lstat(),这里是它们之间的区别:

  • stat遵循符号链接。当给定一个符号链接的路径时,它返回符号链接目标的状态。
  • lstat不遵循符号链接。当给定一个符号链接的路径时,它返回符号链接的状态,而不是它的目标。
于 2017-10-19T18:36:24.720 回答