562 Stimmen

Node.js überprüfen, ob der Pfad eine Datei oder ein Verzeichnis ist

Es scheint, dass ich keine Suchergebnisse finde, die erklären, wie man das macht.

Alles, was ich tun möchte, ist herauszufinden, ob ein bestimmter Pfad eine Datei oder ein Verzeichnis (Ordner) ist.

874voto

Jason Sperske Punkte 28600

Das Folgende sollte Ihnen Auskunft geben. Von den Dokumenten:

fs.lstatSync(path_string).isDirectory() 

Die von fs.stat() und fs.lstat() zurückgegebenen Objekte gehören zu diesem Typ.

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() // (nur gültig mit fs.lstat())
stats.isFIFO()
stats.isSocket()

HINWEIS:

Die obige Lösung wird einen Error werfen, wenn; z.B. die Datei oder das Verzeichnis nicht existiert.

Wenn Sie einen true oder false Ansatz wünschen, probieren Sie fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory(); aus, wie es Joseph in den Kommentaren unten erwähnt hat.

97voto

Marcos Casagrande Punkte 33488

Aktualisierung: Node.Js >= 10

Wir können die neue fs.promises API verwenden

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

(async() => {
    const stat = await fs.lstat('test.txt');
    console.log(stat.isFile());
})().catch(console.error)

Beliebige Node.Js-Version

So erkennt man, ob ein Pfad eine Datei oder ein Verzeichnis ist, asynchron, was der empfohlene Ansatz in Node.js ist. mit fs.lstat

const fs = require("fs");

let path = "/Pfad/zum/Irgendwas";

fs.lstat(path, (err, stats) => {

    if(err)
        return console.log(err); //Fehler behandeln

    console.log(`Ist Datei: ${stats.isFile()}`);
    console.log(`Ist Verzeichnis: ${stats.isDirectory()}`);
    console.log(`Ist symbolischer Link: ${stats.isSymbolicLink()}`);
    console.log(`Ist FIFO: ${stats.isFIFO()}`);
    console.log(`Ist Socket: ${stats.isSocket()}`);
    console.log(`Ist Zeichengerät: ${stats.isCharacterDevice()}`);
    console.log(`Ist Blockgerät: ${stats.isBlockDevice()}`);
});

Beachte bei der Verwendung der synchronen API:

Bei Verwendung der synchronen Form werden Ausnahmen sofort ausgelöst. Du kannst try/catch verwenden, um Ausnahmen zu behandeln oder sie weiterzugeben.

try{
     fs.lstatSync("/irgendein/pfad").isDirectory()
}catch(e){
   // Fehler behandeln
   if(e.code == 'ENOENT'){
     // keine Datei oder Verzeichnis vorhanden
     // etwas unternehmen
   }else {
     // etwas anderes tun
   }
}

34voto

kungfooman Punkte 3915

Ernsthaft, Frage besteht seit fünf Jahren und keine schöne Fassade?

function isDir(path) {
    try {
        var stat = fs.lstatSync(path);
        return stat.isDirectory();
    } catch (e) {
        // lstatSync wirft einen Fehler, wenn der Pfad nicht existiert
        return false;
    }
}

17voto

Zdenek F Punkte 1264

Wenn Sie dies benötigen, während Sie über ein Verzeichnis iterieren (denn so habe ich diese Frage gefunden):

Seit Node 10.10+ hat fs.readdir eine withFileTypes Option, die bewirkt, dass es Verzeichniseinträge als fs.Dirent zurückgibt, anstatt von Zeichenfolgen. Verzeichniseinträge haben eine name Eigenschaft und nützliche Methoden wie isDirectory oder isFile, sodass Sie fs.lstat nicht explizit aufrufen müssen.

import { promises as fs } from 'fs';

// ./my-dir hat zwei Unterverzeichnisse: dir-a und dir-b

const dirEntries = await fs.readdir('./my-dir', { withFileTypes: true });

// Lassen Sie uns alle Verzeichnisse in ./my-dir filtern

const onlyDirs = dirEntries.filter(de => de.isDirectory()).map(de => de.name);

// onlyDirs ist jetzt [ 'dir-a', 'dir-b' ]

15voto

cndw Punkte 175

Je nach Bedarf können Sie wahrscheinlich auf das path-Modul von Node vertrauen.

Sie können möglicherweise nicht auf das Dateisystem zugreifen (z. B. wenn die Datei noch nicht erstellt wurde) und ehrlich gesagt sollten Sie wahrscheinlich vermeiden, auf das Dateisystem zuzugreifen, es sei denn, Sie benötigen wirklich die zusätzliche Validierung. Wenn Sie davon ausgehen können, dass das, was Sie überprüfen, dem .-Format folgt, schauen Sie sich einfach den Namen an.

Natürlich müssen Sie, wenn Sie nach einer Datei ohne Erweiterungsnamen suchen, auf das Dateisystem zugreifen, um sicher zu sein. Aber halten Sie es einfach, bis Sie mehr Komplexität benötigen.

const path = require('path');

function isFile(pathItem) {
  return !!path.extname(pathItem);
}

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