Comment puis-je vérifier de manière synchrone, en utilisant node.js si un fichier ou un répertoire existe ?
le PO veut une solution synchrone
Comment puis-je vérifier de manière synchrone, en utilisant node.js si un fichier ou un répertoire existe ?
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.
fs.existsSync('filePath')
également voir les documents ici .
Retourne true si le chemin existe, false sinon.
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().
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
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."
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;
}
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.