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.

9voto

Vijay G Points 70
const fs = require('fs');

vérifier dans la fonction comme ci-dessous,

if(fs.existsSync(<path_that_need_to_be_checked>)){
  // enter the code to excecute after the folder is there.
}
else{
  // Below code to create the folder, if its not there
  fs.mkdir('<folder_name>', cb function);
}

6voto

gsalgadotoledo Points 1165

Fs.exists() est obsolète, ne l'utilisez pas. https://nodejs.org/api/fs.html#fs_fs_exists_path_callback

Vous pourriez mettre en œuvre la méthode de base de nodejs utilisée à cet effet : https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86

function statPath(path) {
  try {
    return fs.statSync(path);
  } catch (ex) {}
  return false;
}

cela retournera l'objet de statistiques, puis une fois que vous avez obtenu l'objet de statistiques, vous pouvez essayer de

var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
  // do something
}

5voto

jstice4all Points 811

Certaines réponses ici disent que fs.exists y fs.existsSync sont toutes deux dépréciées. Selon la documentation, ce n'est plus vrai. Seul fs.exists est déprogrammé maintenant :

Notez que fs.exists() est déprécié, mais fs.existsSync() ne l'est pas. (La méthode paramètre de callback de fs.exists() accepte des paramètres qui sont paramètres qui sont incompatibles avec d'autres callbacks Node.js. fs.existsSync() n'utilise pas de callback). utilise pas de callback).

Vous pouvez donc utiliser en toute sécurité fs.existsSync() pour vérifier de manière synchrone si un fichier existe.

3voto

Ivo Wetzel Points 27802

El path ne fournit pas une version synchrone de path.exists il faut donc jouer avec les fs module.

La chose la plus rapide que je puisse imaginer est d'utiliser fs.realpathSync ce qui entraînera une erreur que vous devrez rattraper. Vous devez donc créer votre propre fonction d'enveloppe avec un try/catch.

1voto

L'utilisation de tests fileSystem (fs) déclenchera des objets d'erreur, qu'il vous faudra alors envelopper dans une déclaration try/catch. Épargnez-vous des efforts et utilisez une fonctionnalité introduite dans la branche 0.4.x.

var path = require('path');

var dirs = ['one', 'two', 'three'];

dirs.map(function(dir) {
  path.exists(dir, function(exists) {
    var message = (exists) ? dir + ': is a directory' : dir + ': is not a directory';
    console.log(message);
  });
});

2 votes

Le path.exists est maintenant sous fs donc c'est fs.exists(path, callback)

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