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.
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.
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.
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?
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;
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 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.