我正在尝试编写一个函数,告诉我某个路径是一个目录。
var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
fs.statSync(pathname, function(err, stats) {
console.log(stats.isDirectory());
});
console.log("+++++++++++++++++++++++++++++++++++++++");
然而,它从未打印出答案。
如果存在路径名 - 它不会调用该函数。
如果它不存在,则会生成异常:ENOENT not a file or directory
。
我不想知道它存在路径名,但我想知道它是否是一个目录。
有人可以帮我解决吗?
答案 0 :(得分:28)
您正在使用不使用回调的同步版本。它只是返回结果。因此,要么使用异步表单fs.stat(path, callback)
,要么使用如下所示的同步表单:
var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
var stats = fs.statSync(pathname);
console.log(stats.isDirectory());
console.log("+++++++++++++++++++++++++++++++++++++++");
答案 1 :(得分:6)
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' }
很多元素对我们来说通常都是无用的,是的。但这是所有这些变量的意义,according to this article:
您也可以像nodeJS documentation says一样获取更多信息,例如:
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
不遵循符号链接。当给定一个符号链接的路径时,它返回符号链接的统计信息,而不是其目标。