无法从 fs.readdir 获取 fs.Dirent 数组
Posted
技术标签:
【中文标题】无法从 fs.readdir 获取 fs.Dirent 数组【英文标题】:Can't get array of fs.Dirent from fs.readdir 【发布时间】:2019-02-12 14:47:59 【问题描述】:我正在使用节点 8.10.0。
fs.readdir()
返回文件名和子目录名的数组,或 fs.Dirents[]
。
我无法让它工作。这是一个简单的例子:
console.log(require("fs").readdirSync("/", withFileTypes:true));
这给了我一个字符串数组(例如["bin", "mnt", "usr", "var", ...]
),而不是fs.Dirent
对象数组(这是我想要的)。
如何让它工作?
【问题讨论】:
分享输出。 fs.readddir(...) 总是返回包含文件名的字符串数组。 用于获取您已迭代此数组的文件。 @mehta-rohan 不检查那个链接,你可以得到fs.Dirent[]
勾选,我答对了
【参考方案1】:
在v10.10.0中添加了必需的功能,您必须更新节点。
【讨论】:
在cli中运行node -v
哦,我现在明白了:"Class: fs.Dirent #Added in: v10.10.0"
升级到v10.10.0,依然得到字符串数组
...去他妈的。那么传统的做法是什么?很多统计数据?【参考方案2】:
我遇到了同样的问题,虽然我有最新的 node.js(目前是 v10.16)并且 VS Code 中的智能感知与 online documentation 一致,但运行时的现实让我感到惊讶。但那是因为代码是由 node.js v10.2(在 VS Code 扩展内)执行的。
所以在 node.js 10.2 上,此代码适用于我在 directory
中获取文件:
import * as fs from 'fs';
import util = require('util');
export const readdir = util.promisify(fs.readdir);
let fileNames: string[] = await readdir(directory)
// keep only files, not directories
.filter(fileName => fs.statSync(path.join(directory, fileName)).isFile());
在最新的 node.js 上,同样的代码可以这样简化:
let fileEnts: fs.Dirent[] = await fs.promises.readdir(directory, withFileTypes: true );
let fileNames: string[] = fileEnts
.filter(fileEnt => fileEnt.isFile())
.map(fileEnt => fileEnt.name);
代码 sn-ps 在 Typescript 中。
【讨论】:
以上是关于无法从 fs.readdir 获取 fs.Dirent 数组的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容
使用 fs.readdir 和 fs.statSync 返回 ENOENT,没有这样的文件或目录错误