Quando si desidera scrivere in un file di registro, ovvero aggiungere dati alla fine di un file, non utilizzare maiappendFile . appendFileapre un handle di file per ogni pezzo di dati che aggiungi al tuo file, dopo un po 'ricevi un bellissimo EMFILEerrore.
Posso aggiungere che appendFilenon è più facile da usare di un WriteStream.
Esempio con 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());
Fino a 8000 sul mio computer, è possibile aggiungere dati al file, quindi ottenere questo:
{ 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' }
Inoltre, appendFilescriverà quando è abilitato, quindi i tuoi registri non saranno scritti dal timestamp. Puoi provare con l'esempio, impostare 1000 al posto di 100000, l'ordine sarà casuale, dipende dall'accesso al file.
Se si desidera aggiungere un file, è necessario utilizzare un flusso scrivibile come questo:
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();
Lo finisci quando vuoi. Non è nemmeno richiesto l'uso stream.end(), l'opzione predefinita è AutoClose:true, quindi il file terminerà quando termina il processo ed eviti di aprire troppi file.