web-dev-qa-db-fra.com

comment déterminer si le répertoire est un répertoire vide avec nodejs

J'ai recherché le Nodejs Doc, mais ne trouve pas d'API relative.

J'écris donc le code suivant pour déterminer si le répertoire est un répertoire vide.

var fs = require('fs');

function isEmptyDir(dirnane){
    try{
        fs.rmdirSync(dirname)
    }
    catch(err){
        return false;
    }
    fs.mkdirSync(dirname);
    return true
}

QUESTION: cela ressemble à des problèmes, il y a une meilleure façon de le faire avec nodejs?

14
Qiu

Je suppose que je me demande pourquoi vous ne listez pas simplement les fichiers dans le répertoire et voyez si vous récupérez des fichiers?

fs.readdir(dirname, function(err, files) {
    if (err) {
       // some sort of error
    } else {
       if (!files.length) {
           // directory appears to be empty
       }
    }
});

Bien sûr, vous pouvez également en faire une version synchrone.

Bien sûr, cela ne garantit pas qu'il n'y a rien dans le répertoire, mais cela signifie qu'il n'y a pas de fichiers publics que vous êtes autorisé à y voir.

20
jfriend00

Il existe la possibilité d'utiliser l'appel de méthode opendir qui crée un itérateur pour le répertoire.

Cela supprimera la nécessité de lire tous les fichiers et évitera la mémoire potentielle et le temps supplémentaire

import {promises as fsp} from "fs"
const dirIter = await fsp.opendir(_folderPath);
const {value,done} = await dirIter[Symbol.asyncIterator]().next();
await dirIter.close()

La valeur done vous dirait si le répertoire est vide

0
johnmerm

fonction de synchronisation simple comme vous essayiez de:

const fs = require('fs');

function isEmpty(path) {
    return fs.readdirSync(path).length === 0;
}
0
Russell Chisholm