是否有任何方法可以获得节点js的文件夹统计信息

问题描述 投票:1回答:2

有什么方法可以获得节点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
javascript node.js server-side stat
2个回答
2
投票

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

来自doc:

出生时间“出生时间” - 文件创建时间。创建文件时设置一次。在没有出生时间的文件系统上,该字段可以改为包含ctime或1970-01-01T00:00Z(即,unix纪元时间戳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)
    });
});

0
投票

fs.stat的回调应该是(err, stats) => {}的形式。您正在打印错误 - 所以如果没有错误,您将无法获得任何输出。

作为一个注释,fs.stat将适用于文件和目录,因为它们在底层Node.js运行时中或多或少是相同的数据结构。

© www.soinside.com 2019 - 2024. All rights reserved.