1466 votes

Vérifier de manière synchrone si le fichier/répertoire existe dans Node.js

Comment puis-je vérifier de manière synchrone, en utilisant node.js si un fichier ou un répertoire existe ?

72 votes

Les opérations synchrones sont idéales pour effectuer des opérations ponctuelles sur des fichiers/répertoires avant de renvoyer un module. Par exemple, l'amorçage d'un fichier de configuration.

1 votes

@PaulDraper avec un cachet chaud n'est pas vrai dans tous les cas.

22 votes

Quelles que soient les performances, il arrive parfois que l'on veuille l'exécuter de manière synchronisée pour l'expérience du développeur. Par exemple, si vous utilisez Node pour un script de traitement de données qui, par conception, devrait être bloquant, dans ce cas, l'asynchronisme est nécessaire. exists ne fait qu'ajouter des rappels inutiles.

1voto

Joel Harkes Points 6040

Mise à jour de la réponse pour les personnes qui ont "correctement" souligné que cela ne répond pas directement à la question, mais apporte plutôt une option alternative.

Solution de synchronisation :

fs.existsSync('filePath') également voir les documents ici .

Retourne true si le chemin existe, false sinon.

Solution Async Promise

Dans un contexte asynchrone, vous pourriez simplement écrire la version asynchrone dans la méthode sync en utilisant la méthode await mot-clé. Vous pouvez simplement transformer la méthode de rappel asynchrone en une promesse comme ceci :

function fileExists(path){
  return new Promise((resolve, fail) => fs.access(path, fs.constants.F_OK, 
    (err, result) => err ? fail(err) : resolve(result))
  //F_OK checks if file is visible, is default does no need to be specified.

}

async function doSomething() {
  var exists = await fileExists('filePath');
  if(exists){ 
    console.log('file exists');
  }
}

les docs sur access().

1 votes

le PO veut une solution synchrone

0 votes

Vous devez mettre à jour votre code pour function asyncFileExists(path) { //F_OK checks if file is visible, is default does no need to be specified. return new Promise(function (res, rej) { fs.access( path, fs.constants.F_OK, function (err) { err ? rej(err) : res(true); }, ); }); }

1voto

Carlos Abraham Points 450

La réponse a déjà été donnée, mais si vous aimez installer des modules, vous pouvez utiliser dtfe qui signifie

Le fichier existe-t-il ?

const dtfe = require('dtfe');

dtfe('package.json');
//=> true

1voto

Fisheiyy Points 35

Vous pouvez utiliser fs-extra (npm i fs-extra) et son fs.ensureFile ou pour un répertoire fs.ensureDir puisque fs.exists a été déprécarisé et que fs.access ne recommande pas de modifier ce fichier après l'avoir utilisé "N'utilisez pas fs.access() pour vérifier l'accessibilité d'un fichier avant d'appeler fs.open(), fs.readFile() ou fs.writeFile(). Cela introduit une situation de concurrence, car d'autres processus peuvent modifier l'état du fichier entre les deux appels. Au lieu de cela, le code utilisateur doit ouvrir/lire/écrire le fichier directement et gérer l'erreur soulevée si le fichier n'est pas accessible."

0voto

Grallen Points 176

Les documents sur fs.stat() dit d'utiliser fs.access() si vous n'avez pas l'intention de manipuler le fichier. Il n'a pas donné de justification, peut-être plus rapide ou moins gourmand en mémoire ?

J'utilise node pour l'automatisation linéaire, donc j'ai pensé partager la fonction que j'utilise pour tester l'existence de fichiers.

var fs = require("fs");

function exists(path){
    //Remember file access time will slow your program.
    try{
        fs.accessSync(path);
    } catch (err){
        return false;
    }
    return true;
}

0voto

Yairopro Points 1360

graph-fs


Installer

npm i graph-fs

Utilisez

const {Node} = require("graph-fs");
const directory = new Node("/path/to/directory");

directory.exists; // <--

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X