无法理解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时,它将返回符号链接的属性,而不是其目标。