Wenn Sie in einer Log - Datei schreiben wollen, das heißt Daten an das Ende einer Datei anhängen, nie verwenden appendFile
. appendFile
Öffnet ein Dateihandle für jedes Datenelement, das Sie Ihrer Datei hinzufügen. Nach einer Weile wird eine schöne EMFILE
Fehlermeldung angezeigt.
Ich kann hinzufügen, dass appendFile
das nicht einfacher zu bedienen ist als ein WriteStream
.
Beispiel mit appendFile
:
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
fs.appendFile("append.txt", index+ "\n", function (err) {
if (err) console.log(err);
});
});
console.log(new Date().toISOString());
Bis zu 8000 auf meinem Computer können Sie Daten an die Datei anhängen, dann erhalten Sie Folgendes:
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
at Error (native)
errno: -4066,
code: 'EMFILE',
syscall: 'open',
path: 'C:\\mypath\\append.txt' }
Außerdem appendFile
wird geschrieben, wenn es aktiviert ist, sodass Ihre Protokolle nicht per Zeitstempel geschrieben werden. Sie können mit Beispiel testen, 1000 anstelle von 100000 setzen, die Reihenfolge ist zufällig, hängt vom Zugriff auf die Datei ab.
Wenn Sie an eine Datei anhängen möchten, müssen Sie einen beschreibbaren Stream wie den folgenden verwenden:
var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
Sie beenden es, wenn Sie wollen. Sie müssen nicht einmal verwenden stream.end()
, die Standardoption ist AutoClose:true
, sodass Ihre Datei endet, wenn Ihr Prozess endet und Sie vermeiden, zu viele Dateien zu öffnen.