我试图追加一个字符串到日志文件。但是writeFile会在每次写入字符串之前删除内容。
fs.writeFile('log.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
}); // => message.txt erased, contains only 'Hello Node'
有什么简单的方法吗?
我试图追加一个字符串到日志文件。但是writeFile会在每次写入字符串之前删除内容。
fs.writeFile('log.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
}); // => message.txt erased, contains only 'Hello Node'
有什么简单的方法吗?
当前回答
尝试使用flags: 'a'将数据附加到文件中
var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
stream.once('open', function(fd) {
stream.write(msg+"\r\n");
});
其他回答
对于偶尔的追加,你可以使用appendFile,每次调用它都会创建一个新的文件句柄:
异步:
const fs = require('fs');
fs.appendFile('message.txt', 'data to append', function (err) {
if (err) throw err;
console.log('Saved!');
});
同步:
const fs = require('fs');
fs.appendFileSync('message.txt', 'data to append');
但如果重复向同一个文件追加,重用文件句柄会好得多。
尝试使用flags: 'a'将数据附加到文件中
var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
stream.once('open', function(fd) {
stream.write(msg+"\r\n");
});
除了appendFile,您还可以在writeFile中传递一个标志来将数据追加到现有文件。
fs.writeFile('log.txt', 'Hello Node', {'flag':'a'}, function(err) {
if (err) {
return console.error(err);
}
});
通过传递标志'a',数据将被追加到文件的末尾。
我包装了async fs。appendFile变成一个基于promise的函数。希望它能帮助其他人看到这是如何运作的。
append (path, name, data) {
return new Promise(async (resolve, reject) => {
try {
fs.appendFile((path + name), data, async (err) => {
if (!err) {
return resolve((path + name));
} else {
return reject(err);
}
});
} catch (err) {
return reject(err);
}
});
}
你需要打开它,然后写进去。
var fs = require('fs'), str = 'string to append to file';
fs.open('filepath', 'a', 666, function( e, id ) {
fs.write( id, 'string to append to file', null, 'utf8', function(){
fs.close(id, function(){
console.log('file closed');
});
});
});
下面是一些有助于解释参数的链接
开放 写 关闭
编辑:这个答案不再有效,请查看新的fs。appendFile追加方法。