ノード8.10.0を使用しています。
fs.readdir()
は、ファイル名と子ディレクトリ名の配列、または fs.Dirents[]
を返します。
私はそれを機能させることができません。以下に簡単な例を示します。
console.log(require("fs").readdirSync("/", {withFileTypes:true}));
これにより、["bin", "mnt", "usr", "var", ...]
オブジェクトの配列ではなく、文字列の配列(たとえば、fs.Dirent
)が得られます(これは私が望むものです)。
これを機能させるにはどうすればよいですか?
必要な機能がv10.10.0に追加されました。ノードを更新する必要があります。
同じ問題にぶつかりました。最新の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にあります。