我是否可以通过 node js 获得文件夹统计信息?
我想要 if(!function_exists('each')){
function each(&$array){
if(is_array($array)){
$key=key($array);
if($key!==null&&$key!==false){
next($array);
return array($array[$key],$key);
}
return false;
}elseif(is_object($array)&&key_exists('Traversable',class_implements($array))){
if($array->valid()){
$current=$array->current();
$key=$array->key();
$array->next($array);
return array($current,$key);
}
return false;
}
return false;
}
}
中的一个函数,可以看到文件夹统计信息而不是文件状态
我已经尝试过此功能
nodejs
但是它似乎只适用于文件而不是文件夹 我正在使用node.js在服务器端工作 我的代码,以备不时之需
fs.stat(path,(error,state)=>{
console.log(state)
})
上面代码中的文件只有文件夹 状态未定义 那就是我得到一个错误
let folders=fs.readdirSync(path.join(__dirname,'../movies/'));
folders.map((paths)=>{
fs.stat(paths,(f,state)=>{
console.log(f,state)
})
})
答案 0 :(得分:2)
如果使用得当,fs.stat()
会在此代码中直接从console.log(stats)
获取的文件夹中提供此信息(在Windows上运行,但我认为它也应在其他平台上运行):< / p>
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
不是创建时间(它是文件节点更改时间,它是节点参数,而不是文件内容)。
来自文档:
生日“生日”-文件创建的时间。创建文件后设置一次。在无法使用出生时间的文件系统上,该字段可以保存ctime或1970-01-01T00:00Z(即unix epoch时间戳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)
});
});
答案 1 :(得分:0)
fs.stat
中的回调应采用(err, stats) => {}
的形式。您正在打印错误-因此,如果没有错误,您将不会获得任何输出。
请注意,fs.stat
既适用于文件也适用于目录,因为它们在底层Node.js运行时中都具有相同的数据结构。