有什么方法可以让我用节点 js 获取文件夹统计信息

is there is any way that i can get a folder stats with node js

有什么方法可以使用 node 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 中的回调应采用 (err, stats) => {} 形式。您正在打印错误 - 因此如果没有错误,您将不会得到任何输出。

请注意,fs.stat 适用于文件和目录,因为它们在底层 Node.js 运行时中的数据结构大致相同。

如果使用得当,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 docbirthtime 可能是也可能不是创建日期(因 OS 而异)。 ctime不是创建时间(是文件节点更改时间,是节点参数,不是文件内容)。

来自文档:

birthtime "Birth Time" - Time of file creation. Set once when the file is created. On filesystems where birthtime is not available, this field may instead hold either the ctime or 1970-01-01T00:00Z (ie, unix epoch timestamp 0). This value may be greater than atime or mtime in this case. On Darwin and other FreeBSD variants, also set if the atime is explicitly set to an earlier value than the current birthtime using the utimes(2) system call.

这似乎是一种说法,只是一团糟,而且因平台而异。因此,如果您想将它用于一些有用的事情,您可能必须测试您的平台,看看它是否提供了您真正需要的东西。

相关讨论:

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() returns 只是 file/dir 名称(没有附加路径)所以当你尝试这样做时:

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)
    });
});