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);
}

4voto

sdgfsdh Punkte 28371

Mit Node.js 10 + ES6:

import path from 'path';
import fs from 'fs';

(async () => {
  const dir = path.join(__dirname, 'upload');

  try {
    await fs.promises.mkdir(dir);
  } catch (error) {
    if (error.code === 'EEXIST') {
      // Etwas existiert bereits, aber ist es eine Datei oder ein Verzeichnis?
      const lstat = await fs.promises.lstat(dir);

      if (!lstat.isDirectory()) {
        throw error;
      }
    } else {
      throw error;
    }
  }
})();

3voto

bobajeff Punkte 141

Von der Dokumentation so machen Sie es asynchron (und rekursiv):

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

fsPromises.access(dir, fs.constants.F_OK)
   .catch(async() => {
                await fs.mkdir(dir, { recursive: true }, function(err) {
                    if (err) {
                      console.log(err)
                    }
                  })
    });

3voto

Nathan Cooper Punkte 5834

Ich möchte eine TypeScript Promise Refaktorisierung von josh3736's Antwort hinzufügen.

Es tut dasselbe und hat die gleichen Randfälle. Es verwendet nur Promises, TypeScript-Typdefinitionen und funktioniert mit "use strict".

// https://en.wikipedia.org/wiki/File_system_permissions#Numeric_notation
const allRWEPermissions = parseInt("0777", 8);

function ensureFilePathExists(path: string, mask: number = allRWEPermissions): Promise {
    return new Promise(
        function(resolve: (value?: void | PromiseLike) => void,
            reject: (reason?: any) => void): void{
            mkdir(path, mask, function(err: NodeJS.ErrnoException): void {
                if (err) {
                    if (err.code === "EEXIST") {
                        resolve(null); // Ignoriere den Fehler, wenn der Ordner bereits existiert
                    } else {
                        reject(err); // Es ist etwas anderes schief gelaufen
                    }
                } else {
                    resolve(null); // Ordner erfolgreich erstellt
                }
            });
    });
}

2voto

majid jiji Punkte 404

Sie können das Node.js-Dateisystem-Befehl fs.stat verwenden, um zu überprüfen, ob ein Verzeichnis existiert, und fs.mkdir verwenden, um ein Verzeichnis mit Rückruf zu erstellen, oder fs.mkdirSync verwenden, um ein Verzeichnis ohne Rückruf zu erstellen, wie in diesem Beispiel:

// Zuerst fs benötigen
const fs = require('fs');

// Verzeichnis erstellen, wenn es nicht existiert (Funktion)
const createDir = (path) => {
    // Überprüfen, ob das Verzeichnis existiert
    fs.stat(path, (err, stats) => {
        if (stats.isDirectory()) {
            // Nichts tun
        } else {
            // Wenn der angegebene Pfad kein Verzeichnis ist, ein Verzeichnis erstellen
            fs.mkdirSync(path);
        }
    });
};

2voto

Jesus is Lord Punkte 14223

Ich musste Unterverzeichnisse erstellen, wenn sie nicht vorhanden waren. Ich habe dies verwendet:

const path = require('path');
const fs = require('fs');

function ensureDirectoryExists(p) {
    //console.log(ensureDirectoryExists.name, {p});
    const d = path.dirname(p);
    if (d && d !== p) {
        ensureDirectoryExists(d);
    }
    if (!fs.existsSync(d)) {
        fs.mkdirSync(d);
    }
}

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