Cuando desee escribir en un archivo de registro, es decir, agregar datos al final de un archivo, nunca lo use appendFile. appendFileabre un identificador de archivo para cada pieza de datos que agrega a su archivo, después de un tiempo obtiene un hermoso EMFILEerror.
Puedo agregar que appendFileno es más fácil de usar que a WriteStream.
Ejemplo 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());
Hasta 8000 en mi computadora, puede agregar datos al archivo, luego obtiene esto:
{ 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' }
Además, appendFileescribirá cuando esté habilitado, por lo que sus registros no se escribirán con marca de tiempo. Puede probar con el ejemplo, establecer 1000 en lugar de 100000, el orden será aleatorio, depende del acceso al archivo.
Si desea agregar a un archivo, debe usar una secuencia de escritura como esta:
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 terminas cuando quieres. Ni siquiera está obligado a usar stream.end(), la opción predeterminada es AutoClose:true, por lo que su archivo finalizará cuando finalice su proceso y evite abrir demasiados archivos.