Eine leere Datei in Node.js erstellen?

75

Im Moment benutze ich

fs.openSync(filepath, 'a')

Aber es ist ein bisschen schwierig. Gibt es eine Standardmethode zum Erstellen einer leeren Datei in Node.js?

Lai Yu-Hsuan
quelle

Antworten:

146

Wenn Sie erzwingen möchten, dass die Datei leer ist, möchten Sie 'w'stattdessen das Flag verwenden:

var fd = fs.openSync(filepath, 'w');

Dadurch wird die Datei abgeschnitten, falls vorhanden, und erstellt, wenn dies nicht der Fall ist.

Schließen Sie es in einen fs.closeSyncAufruf ein , wenn Sie den zurückgegebenen Dateideskriptor nicht benötigen.

fs.closeSync(fs.openSync(filepath, 'w'));
JohnnyHK
quelle
1
fs.writeFileSync ('empty.txt', '');
Ahuigo
fs.appendFileSync ('do_not_override.txt', '');
Ahuigo
2
Sie können hier nach mehr Optionen suchen als wFlag nodejs.org/api/fs.html#fs_file_system_flags
Aditya Kresna Permana
Gibt es eine Möglichkeit, mehrere Verzeichnisse gleichzeitig zu erstellen, außer Schleifen mkdir? danke
oldboy
8

https://github.com/isaacs/node-touch erledigt die Aufgabe und überschreibt wie das emulierte UNIX-Tool keine vorhandene Datei.

Kyle Mathews
quelle
3
Hat node-touches fs.closeSync(fs.openSync(filepath, 'a'));neben der Aktualisierung des Zeitstempels für vorhandene Dateien noch weitere Vorteile ?
Mikael Lepistö
8

Hier ist die asynchrone Methode, mit der "wx"vorhandene Dateien fehlschlagen.

var fs = require("fs");
fs.open(path, "wx", function (err, fd) {
    // handle error
    fs.close(fd, function (err) {
        // handle error
    });
});
Silberwind
quelle
warum soll es scheitern?
Nick Sotiros
11
@NickSotiros, damit die Datei nicht überschrieben wird. Einige Anwendungsfälle möchten dies möglicherweise.
Michael Ozeryansky
8

Wenn Sie möchten, dass es genau wie das UNIX-Touch ist, würde ich das verwenden, was Sie haben. fs.openSync(filepath, 'a')Andernfalls überschreibt das 'w' die Datei, wenn es bereits vorhanden ist, und 'wx' schlägt fehl, wenn es bereits vorhanden ist. Sie möchten jedoch die mtime der Datei aktualisieren. Verwenden Sie daher 'a' und hängen Sie nichts an.

Nick Sotiros
quelle