无法从fs.readdir

时间:2018-09-07 09:16:14

标签: node.js fs

我正在使用节点8.10.0。

fs.readdir()返回文件名和子目录名称或 fs.Dirents[]的数组。

我无法解决这个问题。这是一个简单的示例:

console.log(require("fs").readdirSync("/", {withFileTypes:true}));

这给了我一个字符串数组(例如["bin", "mnt", "usr", "var", ...]),而不是一个fs.Dirent对象数组(这就是我想要的)。

如何使它工作?

2 个答案:

答案 0 :(得分:12)

v10.10.0中添加了必需的功能,您必须更新节点。

答案 1 :(得分:1)

我遇到了同样的问题,尽管我拥有最新的node.js(当前为v10.16),并且VS Code中的intellisense与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);

代码段在Typescript中。