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.

3voto

vdegenne Punkte 9972

Hier ist eine Funktion, die ich verwende. Niemand verwendet die promisify- und await/async-Funktion in diesem Beitrag, daher dachte ich, ich würde sie teilen.

const promisify = require('util').promisify;
const lstat = promisify(require('fs').lstat);

async function isDirectory (path) {
  try {
    return (await lstat(path)).isDirectory();
  }
  catch (e) {
    return false;
  }
}

Hinweis: Ich verwende require('fs').promises; nicht, weil es seit einem Jahr experimentell ist, besser nicht darauf verlassen.

1voto

TamusJRoyce Punkte 738

Die obigen Antworten überprüfen, ob ein Dateisystem einen Pfad enthält, der eine Datei oder ein Verzeichnis ist. Aber es identifiziert nicht, ob allein ein bestimmter Pfad eine Datei oder ein Verzeichnis ist.

Die Antwort besteht darin, verzeichnisbasierte Pfade mit "/." zu identifizieren, z. B. --> "/c/dos/run/." <-- abschließender Punkt.

Wie ein Pfad zu einem Verzeichnis oder einer Datei, die noch nicht geschrieben wurde. Oder ein Pfad von einem anderen Computer. Oder ein Pfad, bei dem sowohl eine Datei als auch ein Verzeichnis mit demselben Namen existieren.

// /tmp/
// |- dozen.path
// |- dozen.path/.
//    |- eggs.txt
//
// "/tmp/dozen.path" !== "/tmp/dozen.path/"
//
// Nur sehr wenige file systems erlauben das. Aber dennoch. Verlassen Sie sich nicht allein auf das Dateisystem!

// Wandelt den nicht standardmäßigen "Pfad endet in Schrägstrich" in das standardmäßige "Pfad wird durch das aktuelle "." oder das vorherige ".." Verzeichnissymbol identifiziert um.
function tryGetPath(pathItem) {
    const isPosix = pathItem.includes("/");
    if ((isPosix && pathItem.endsWith("/")) ||
        (!isPosix && pathItem.endsWith("\\"))) {
        pathItem = pathItem + ".";
    }
    return pathItem;
}
// Wenn ein Pfad mit einem aktuellen Verzeichnisbezeichner endet, ist es ein Pfad! /c/dos/run/. und c:\dos\run\.
function isDirectory(pathItem) {
    const isPosix = pathItem.includes("/");
    if (pathItem === "." || pathItem ==- "..") {
        pathItem = (isPosix ? "./" : ".\\") + pathItem;
    }
    return (isPosix ? pathItem.endsWith("/.") || pathItem.endsWith("/..") : pathItem.endsWith("\\.") || pathItem.endsWith("\\.."));
} 
// Wenn ein Pfad kein Verzeichnis ist und es nicht leer ist, muss es eine Datei sein
function isFile(pathItem) {
    if (pathItem === "") {
        return false;
    }
    return !isDirectory(pathItem);
}

Node-Version: v11.10.0 - Feb 2019

Zum Abschluss: Warum überhaupt auf das Dateisystem zugreifen?

0voto

Pierrelasse Punkte 21

Ich könnte überprüfen, ob ein Verzeichnis oder eine Datei existiert, indem ich Folgendes verwende:

// Dies gibt zurück, wenn die Datei kein Verzeichnis ist.
if(fs.lstatSync(dir).isDirectory() == false) return;

// Dies gibt zurück, wenn das Verzeichnis keine Datei ist.
if(fs.lstatSync(dir).isFile() == false) return;

-1voto

user3038477 Punkte 1

Funktion, die den Typ zurückgibt

Ich mag Kaffee

type: (uri)-> (fina) ->
  fs.lstat uri, (erro,stats) ->
    console.log {erro} if erro
    fina(
      stats.isDirectory() and "Verzeichnis" or
      stats.isFile() and "Dokument" or
      stats.isSymbolicLink() and "Verknüpfung" or
      stats.isSocket() and "Socket" or
      stats.isBlockDevice() and "Block" or
      stats.isCharacterDevice() and "Zeichen" or
      stats.isFIFO() and "fifo"
    )

Verwendung:

dozo.type("") (type) ->
  console.log "Typ ist #{type}"

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