Comment puis-je vérifier de manière synchrone, en utilisant node.js si un fichier ou un répertoire existe ?
Le path.exists est maintenant sous fs donc c'est fs.exists(path, callback)
Comment puis-je vérifier de manière synchrone, en utilisant node.js si un fichier ou un répertoire existe ?
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
}
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.
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.
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);
});
});
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.
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.5 votes
Définitivement +1 à la déclaration de Kunok. Dans le reste de mon code, je ne le complexifie que lorsqu'il s'agit d'un goulot d'étranglement où la vitesse compte vraiment. Pourquoi n'appliquerais-je pas ce principe à la lecture des fichiers ? Dans de nombreuses parties de nombreux programmes, la simplicité/lisibilité du code peut être plus importante que la vitesse d'exécution. S'il s'agit d'un goulot d'étranglement, j'utiliserai des méthodes asynchrones pour éviter d'interrompre l'exécution du code. Sinon... la synchro est parfaite. Ne détestez pas aveuglément la synchro.
6 votes
S'il vous plaît... pas "à noter" parce que l'utilisateur demande explicitement comment le faire de manière synchrone.