【问题标题】:is there is any way that i can get a folder stats with node js有什么方法可以让我使用节点 js 获取文件夹统计信息
【发布时间】:2018-09-04 23:14:48
【问题描述】:

有什么方法可以让我使用 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

【问题讨论】:

  • 你追求什么样的“统计数据”?文件大小、创建日期、作者等...?
  • 我需要创建文件夹的日期

标签: javascript node.js server-side stat


【解决方案1】:

如果使用得当,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不是创建时间(是文件节点更改时间,是节点参数,不是文件内容)。

来自文档:

birthtime "Birth Time" - 文件创建时间。创建文件时设置一次。在没有出生时间的文件系统上,此字段可能会保存 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)
    });
});

【讨论】:

  • @GrinningTrout - 添加了问题的另一部分,即您没有将完整路径传递给fs.stat(),因此它没有为您的文件/目录寻找正确的路径。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2013-10-25
    • 2013-03-26
    • 2020-08-09
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2021-05-01
    • 2020-12-04
    相关资源
    最近更新 更多