无法理解fs.stat()如何工作

我试图写一个函数,告诉我是一个特定的path是一个目录。

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

但是,它从来不打印答案。

如果path名存在 – 它不会调用该函数。 如果不存在,则会生成一个exception: ENOENT not a file or directory 。 我不想知道它存在的path名,但我想知道它是否是一个目录。

任何人都可以帮我修复它吗?

您正在使用同步版本,它不使用callback。 它只是返回结果。 所以要么使用asynchronousformsfs.stat(path, callback)或使用像这样的同步forms:

 var fs = require('fs'); console.log("+++++++++++++++++++++++++++++++++++++++"); var stats = fs.statSync(pathname); console.log(stats.isDirectory()); console.log("+++++++++++++++++++++++++++++++++++++++"); 

fs.stat()如何工作?

如果要使用callback/asynchronousfs函数,请不要使用同步版本,请使用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
  • 模式:文件保护
  • 链接:指向文件的硬链接数量
  • uid:文件所有者的用户标识。
  • gid:文件所有者的组ID。
  • rdev:设备ID,如果文件是一个特殊的文件。
  • blksize:文件系统I / O的块大小。
  • ino:文件inode号码。 inode是一个文件系统数据结构,
  • 存储关于文件的信息。
  • size:文件总大小(以字节为单位)。
  • 块:为文件分配的数。
  • atime:表示文件上次访问时间的date对象。
  • mtime:表示文件上次修改时间的date对象。
  • ctime:表示上次更改文件索引节点的date对象。

你也可以像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遵循符号链接。 当给定一个符号链接的path时,它将返回符号链接目标的统计信息。
  • lstat不遵循符号链接。 当给定一个符号链接的path时,它将返回符号链接的属性,而不是其目标。