有什么办法可以通过节点js获取文件夹统计信息

时间:2018-09-04 23:14:49

标签: javascript node.js server-side stat

我是否可以通过 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)
    })

})

2 个答案:

答案 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 docbirthtime可能是也可能不是创建日期(因操作系统而异)。 ctime不是创建时间(它是文件节点更改时间,它是节点参数,而不是文件内容)。

来自文档:

  

生日“生日”-文件创建的时间。创建文件后设置一次。在无法使用出生时间的文件系统上,该字段可以保存ctime或1970-01-01T00:00Z(即unix epoch时间戳0)。在这种情况下,该值可能大于atime或mtime。在Darwin和其他FreeBSD变体上,如果使用utimes(2)系统调用将atime显式设置为比当前出生时间更早的值,则也会进行设置。

这似乎是一种说法,只是一团糟,并且因平台而异。因此,如果您想将其用于有用的东西,则可能必须测试平台上的硬件,以查看其是否提供了您真正需要的东西。

相关讨论:

Get file created date in node

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运行时中都具有相同的数据结构。