web-dev-qa-db-fra.com

Impossible d'obtenir un tableau de fs.Dirent à partir de fs.readdir

J'utilise le nœud 8.10.0.

fs.readdir() renvoie un tableau de noms de fichiers et de noms de répertoires enfants, ou fs.Dirents[] .

Je ne peux pas faire fonctionner ça. Voici un exemple simple:

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

Cela me donne un tableau de chaînes (par exemple ["bin", "mnt", "usr", "var", ...]), pas un tableau de fs.Dirent objets (c'est ce que je veux).

Comment puis-je faire fonctionner cela?

12
lonix

La fonctionnalité requise est ajoutée dans: v10.10.0, vous devez mettre à jour le nœud.

14
mehta-rohan

J'ai rencontré le même problème et bien que j'ai le dernier node.js (v10.16 actuellement) et intellisense dans VS Code est compatible avec le documentation en ligne , la réalité de l'exécution m'a surpris. Mais c'est parce que le code est exécuté par node.js v10.2 (à l'intérieur d'une extension VS Code).

Donc sur node.js 10.2, ce code fonctionne pour moi pour obtenir des fichiers dans un 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());

Sur le dernier node.js, le même code pourrait être simplifié de cette façon:

let fileEnts: fs.Dirent[] = await fs.promises.readdir(directory, { withFileTypes: true });

let fileNames: string[] = fileEnts
    .filter(fileEnt => fileEnt.isFile())
    .map(fileEnt => fileEnt.name);

Les extraits de code sont en TypeScript.

1
Jan Dolejsi