1149 Stimmen

Wie man ein Verzeichnis erstellt, wenn es mit Node.js nicht existiert

Ist dies der richtige Weg, um ein Verzeichnis zu erstellen, wenn es nicht existiert?

Es sollte volle Berechtigung für das Skript haben und von anderen lesbar sein.

var dir = __dirname + '/upload';
if (!path.existsSync(dir)) {
    fs.mkdirSync(dir, 0744);
}

8voto

Flion Punkte 9646

Die einfache und moderne Lösung für Node V10 und höher

Wie einige Antworten bereits erwähnt haben, können Sie seit Node 10 recursive:true für mkdir verwenden

Was noch nicht erwähnt wurde, ist dass bei Verwendung von recursive:true, mkdir keinen Fehler zurückgibt, wenn das Verzeichnis bereits existiert.

Sie können also Folgendes tun:

fs.mkdir(dirPath,{recursive:true},(err) => {
    if(err) {
        //Hinweis: Dies wird NICHT ausgelöst, wenn das Verzeichnis bereits existierte
        console.warn(err)
    }
    else{
        //Verzeichnis existiert jetzt 
    }
})

Verwendung von Promises

Auch seit Node 10 können Sie Promise-Versionen aller fs-Funktionen erhalten, indem Sie fs/promises fordern

Wenn Sie diese beiden Dinge zusammenfügen, erhalten Sie diese einfache Lösung:

import * as fs from 'fs/promises';

await fs.mkdir(dirPath, {recursive:true}).catch((err) => {
    //Entscheiden Sie, was Sie tun möchten, wenn dies fehlschlägt
    console.error(err);
});

//Verzeichnis existiert jetzt

8voto

Caffeines Punkte 169

fs.exist() ist veraltet. Deshalb habe ich fs.stat() verwendet, um den Status des Verzeichnisses zu überprüfen. Wenn das Verzeichnis nicht existiert, wirft fs.stat() einen Fehler mit einer Meldung wie 'Datei oder Verzeichnis nicht gefunden'. Dann habe ich ein Verzeichnis erstellt.

const fs = require('fs').promises;

const dir = './dir';
fs.stat(dir).catch(async (err) => {
  if (err.message.includes('no such file or directory')) {
    await fs.mkdir(dir);
  }
});

6voto

Vishnu S Babu Punkte 1372

Verwendung:

var filessystem = require('fs');
var dir = './pfad/unterverzeichnis/';

if (!filessystem.existsSync(dir))
{
    filessystem.mkdirSync(dir);
}
else
{
    console.log("Verzeichnis existiert bereits");
}

6voto

Ping.Goblue Punkte 516
var dir = 'Pfad/zum/Verzeichnis';
try {
  fs.mkdirSync(dir);
} catch(e) {
  if (e.code != 'EEXIST') throw e;
}

5voto

mfdebian Punkte 128

Für alle, die dies im Jahr 2023 suchen, können Sie dies jetzt einfach mit async/await - try/catch-Syntax tun:

import { stat, mkdir } from 'node:fs/promises';

const checkAndMakeDirectory = async (dir) => {
  try {
    await stat(dir);
  } catch (error) {
    if (error.code === "ENOENT") {
      try {
        await mkdir(dir);
      } catch (err) {
        console.error(err.message);
      }
    }
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X