web-dev-qa-db-ja.com

fs.readdirからfs.Direntの配列を取得できません

ノード8.10.0を使用しています。

fs.readdir()は、ファイル名と子ディレクトリ名の配列、または fs.Dirents[] を返します。

私はそれを機能させることができません。以下に簡単な例を示します。

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

これにより、["bin", "mnt", "usr", "var", ...]オブジェクトの配列ではなく、文字列の配列(たとえば、fs.Dirent)が得られます(これは私が望むものです)。

これを機能させるにはどうすればよいですか?

12
lonix

必要な機能がv10.10.0に追加されました。ノードを更新する必要があります。

14
mehta-rohan

同じ問題にぶつかりました。最新のnode.js(現在v10.16)があり、VS Codeのインテリセンスは オンラインドキュメント と一致していますが、実行時の現実には驚かされました。ただし、コードは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にあります。

1
Jan Dolejsi