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.
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()
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.
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)
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
}
}
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' ]
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 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.