Ich muss eine Datei in den folgenden Pfad schreiben:
fs.writeFile('/folder1/folder2/file.txt', 'content', function () {…});
Aber der '/folder1/folder2'
Pfad existiert möglicherweise nicht. Also bekomme ich folgenden Fehler:
message = ENOENT, öffne /folder1/folder2/file.txt
Wie kann ich Inhalte auf diesen Pfad schreiben?
fs.promises.mkdir(path.dirname('/folder1/folder2/file.txt'), {recursive: true}).then(x => fs.promises.writeFile('/folder1/folder2/file.txt', 'content'))
Antworten:
Verwenden Sie mkdirp in Kombination mit
path.dirname
first.Wenn der gesamte Pfad bereits vorhanden ist,
mkdirp
ist ein Noop. Andernfalls werden alle fehlenden Verzeichnisse für Sie erstellt.Dieses Modul macht, was Sie wollen: https://npmjs.org/package/writefile . Habe es beim googeln nach "writefile mkdirp" bekommen. Dieses Modul gibt ein Versprechen zurück, anstatt einen Rückruf entgegenzunehmen. Lesen Sie daher zuerst eine Einführung in Versprechen. Es könnte die Dinge für Sie tatsächlich komplizieren.
Die Funktion, die ich gegeben habe, funktioniert auf jeden Fall.
quelle
fs.promises.mkdir(path.dirname(file), {recursive: true}).then(x => fs.promises.writeFile(file, data))
Ich finde, dass der einfachste Weg, dies zu tun, darin besteht, die outputFile () -Methode aus dem fs-extra- Modul zu verwenden.
Beispiel:
Es hat auch vielversprechende Unterstützung in diesen Tagen!.
quelle
Am einfachsten ist es vielleicht, wenn Sie einfach das fs-path npm-Modul verwenden.
Ihr Code würde dann so aussehen:
quelle
Bearbeiten
NodeJS Version 10 hat eine native Unterstützung für beide hinzugefügt
mkdir
undmkdirSync
um den übergeordneten Director rekursiv mitrecursive: true
der folgenden Option zu erstellen :Und wenn Sie es vorziehen
fs Promises API
, können Sie schreibenUrsprüngliche Antwort
Erstellen Sie die übergeordneten Verzeichnisse rekursiv, wenn sie nicht vorhanden sind! ( Null Abhängigkeiten )
Verwendung
Demo
Versuch es!
Erklärungen
EISDIR
für Mac undEPERM
undEACCES
für Windows.{isRelativeToScript: true}
.path.sep
undpath.resolve()
nicht nur/
Verketten, um plattformübergreifende Probleme zu vermeiden.fs.mkdirSync
und Behandeln des Fehlers mit,try/catch
wenn er ausgelöst wird, um die Rennbedingungen zu behandeln: Ein anderer Prozess kann die Datei zwischen den Aufrufen vonfs.existsSync()
und hinzufügenfs.mkdirSync()
und eine Ausnahme verursachen.if (!fs.existsSync(curDir) fs.mkdirSync(curDir);
. H. Dies ist jedoch ein Anti-Pattern, das den Code für Rennbedingungen anfällig macht.quelle
Sie können verwenden
stats
ist einefs.Stats
Art von Objekt, das Sie überprüfen könnenstats.isDirectory()
. Abhängig von der Prüfung vonerr
undstats
können Sie etwas tunfs.mkdir( ... )
oder einen Fehler werfen.Referenz
Update: Die Kommas im Code wurden korrigiert.
quelle
Hier ist meine benutzerdefinierte Funktion zum rekursiven Erstellen von Verzeichnissen (ohne externe Abhängigkeiten):
quelle
Hier ist meine Funktion, die in Knoten 10.12.0 funktioniert. Hoffe das wird helfen.
quelle
Mit node-fs-extra können Sie dies problemlos tun.
Es installieren
Verwenden Sie dann die outputFile- Methode anstelle von writeFileSync
quelle
Hier ist ein Teil von Myrne Stols Antwort, die als separate Antwort aufgeschlüsselt ist:
quelle
quelle