有什么方法可以获得节点js的文件夹统计信息?我想要在nodejs
中的一个函数,我可以看到文件夹统计信息不是我尝试过此功能的文件状态
fs.stat(path,(error,state)=>{
console.log(state)
})
但它似乎只适用于文件而不是文件夹我在服务器端工作与node.js我的代码,以防你需要它
let folders=fs.readdirSync(path.join(__dirname,'../movies/'));
folders.map((paths)=>{
fs.stat(paths,(f,state)=>{
console.log(f,state)
})
})
上面代码中的文件只有文件夹状态是未定义的,这就是我得到的错误
{ Error: ENOENT: no such file or directory, stat 'C:\Users\DELL N5559\Desktop\stock\Folder'
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'C:\\Users\\DELL N5559\\Desktop\\stock\\Folder' }
enter code here
enter code here
如果使用得当,fs.stat()
会在此代码中直接从console.log(stats)
获取的文件夹中提供此信息(在Windows上运行,但我相信它也可以在其他平台上运行):
const fs = require('fs');
fs.stat("html", function(err, stats) {
if (err) {
console.log(err);
} else {
console.log(stats);
}
});
控制台中的结果:
Stats {
dev: 2525584580,
mode: 16822,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 281474976939511,
size: 0,
blocks: undefined,
atimeMs: 1517560386009.7627,
mtimeMs: 1517560386009.7627,
ctimeMs: 1517560386009.7627,
birthtimeMs: 1517560385994.137,
atime: 2018-02-02T08:33:06.010Z,
mtime: 2018-02-02T08:33:06.010Z,
ctime: 2018-02-02T08:33:06.010Z,
birthtime: 2018-02-02T08:33:05.994Z
}
根据the doc,birthtime
可能是也可能不是创建日期(因操作系统而异)。 ctime
不是创建时间(它的文件节点更改时间,这是节点参数,而不是文件内容)。
来自doc:
出生时间“出生时间” - 文件创建时间。创建文件时设置一次。在没有出生时间的文件系统上,该字段可以改为包含ctime或1970-01-01T00:00Z(即,unix纪元时间戳0)。在这种情况下,该值可能大于atime或mtime。在Darwin和其他FreeBSD变体上,还设置是否使用utimes(2)系统调用将atime显式设置为比当前出生时更早的值。
这似乎是一种说法,它只是一个大混乱,因平台而异。所以,如果你想将它用于有用的东西,你可能不得不测试你的平台,看看它是否提供了你真正需要的东西。
相关讨论:
Is there still no Linux kernel interface to get file creation date?
How to get file created date using fs module?
另外,在你的代码中,你没有足够的路径传递给你fs.stat()
函数。 fs.readdir()
只返回文件/目录名称(没有附加路径),所以当你尝试这样做时:
folders.map((paths)=>{...}
paths
变量只是一个不在当前目录中的文件名。为了使事情有效,你必须在调用fs.stat()
之前将路径放回去。
let root = path.join(__dirname,'../movies/');
let folders = fs.readdirSync(root);
folders.map(name => {
let fullname = path.join(root, name);
fs.stat(fullname,(err, state) => {
console.log(err, state)
});
});
fs.stat
的回调应该是(err, stats) => {}
的形式。您正在打印错误 - 所以如果没有错误,您将无法获得任何输出。
作为一个注释,fs.stat
将适用于文件和目录,因为它们在底层Node.js运行时中或多或少是相同的数据结构。