In meiner Node-Anwendung muss ich ein Verzeichnis entfernen, das einige Dateien enthält, aber fs.rmdir
funktioniert nur bei leeren Verzeichnissen. Wie kann ich das machen?
Antworten
Zu viele Anzeigen?[BEARBEITEN: Verwendung von node.js v15.5.0]
Nachdem ich gerade versucht habe, einige der hier geposteten Lösungen zu verwenden, bin ich auf die folgende Warnung zu veralteten Funktionen gestoßen:
(node:13202) [DEP0147] Warnung vor veralteter Funktion: In zukünftigen Versionen von Node.js wird fs.rmdir(path, { recursive: true }) eine Ausnahme auslösen, wenn der Pfad nicht existiert oder eine Datei ist. Verwenden Sie stattdessen fs.rm(path, { recursive: true, force: true })
fs.rm(path, { recursive: true, force: true });
funktioniert gut, mit fs.rmSync(path, { recursive: true, force: true });
wenn Sie die blockierende Version verwenden möchten.
Wenn Sie Node 8+ verwenden, asynchron arbeiten möchten und keine externen Abhängigkeiten wünschen, finden Sie hier die async/await-Version:
const path = require('path');
const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const lstat = util.promisify(fs.lstat);
const unlink = util.promisify(fs.unlink);
const rmdir = util.promisify(fs.rmdir);
const removeDir = async (dir) => {
try {
const files = await readdir(dir);
await Promise.all(files.map(async (file) => {
try {
const p = path.join(dir, file);
const stat = await lstat(p);
if (stat.isDirectory()) {
await removeDir(p);
} else {
await unlink(p);
console.log(`Datei entfernt ${p}`);
}
} catch (err) {
console.error(err);
}
}))
await rmdir(dir);
console.log(`Ordner entfernt ${dir}`);
} catch (err) {
console.error(err);
}
}
const fs = require("fs");
fs.rmdir("./test", { recursive: true }, (err) => {
if (err) {
console.error(err);
}
});
Geben Sie die Option recursive: true
an. Und es werden alle Dateien und Verzeichnisse des angegebenen Pfads rekursiv gelöscht. (Vorausgesetzt, test
ist ein Verzeichnis, das sich im Stammverzeichnis befindet.)
Wenn Sie async/await bevorzugen, können Sie die fs/promises
API verwenden.
const fs = require('fs/promises');
const removeDir = async (dirPath) => {
await fs.rm(dirPath, {recursive: true});
}
Wenn Sie den Pfad einer einzelnen Datei im Ordner kennen und den Ordner löschen möchten, in dem sich diese Datei befindet.
const fs = require('fs/promises');
const path = require('path');
const removeDir = async (filePath) => {
const { dir } = path.parse(filePath);
await fs.rm(dir, { recursive: true });
}