Cuando se desea escribir en un archivo de registro, es decir, añadir datos al final de un archivo, Nunca utiliza appendFile
, appendFile
abre un identificador de archivo para cada pieza de datos que agregue a su archivo, después de un tiempo obtendrá un hermoso error EMFILE
.
Puedo agregar que appendFile
no es más fácil de usar que un 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 equipo, puede anexar los datos en el fichero, a continuación, se obtiene lo siguiente:
{ 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' }
Por otra parte, appendFile
escribirá cuando está habilitado, por lo que sus registros no se escribirán por 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 anexar a un archivo, se debe utilizar una corriente puede escribir así:
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();
Se termina cuando lo desee. Ni siquiera está obligado a utilizar stream.end()
, la opción predeterminada es AutoClose:true
, por lo que su archivo finalizará cuando finalice su proceso y evitará abrir demasiados archivos.
Puede escribir su respuesta como respuesta a su pregunta y aceptar esa respuesta. De esta manera, las cosas están más organizadas, y está claro que has encontrado tu respuesta. – strager