【发布时间】:2019-11-14 19:06:51
【问题描述】:
我的目的是为特定的时间间隔写一个文件。在区间外创建了一个节点 writeStream 并尝试在区间内使用相同的流将内容写入文件。我希望内容会被覆盖,但它已经开始附加。这是一种方法
方法一:
var fs = require('fs');
var ans = ["first","second","third","fourth","fifth"];
var i =0;
var stream = fs.createWriteStream('stats.log.info',{flags:'w'});
var writeInterval = setInterval(function(){
var data =ans[i%ans.length] ;
if(data.length == 0){
console.log("Failure in ");
}
stream.on('error', function(err){
console.log("error in creating a stream "+err);
clearInterval(writeInterval);
stream.destroy();
return;
});
stream.write(data);
i++;
},2000);
然后我将创建的流移动到最终覆盖文件内容的间隔内。 方法一:创建的流放置在区间内
var fs = require('fs');
var ans = ["first","second","third","fourth","fifth"];
var i =0;
var writeInterval = setInterval(function(){
var stream = fs.createWriteStream('stats.log.info',{flags:'w'});
var data =ans[i%ans.length] ;
if(data.length == 0){
console.log("Failure in ");
}
stream.on('error', function(err){
console.log("error in creating a stream "+err);
clearInterval(writeInterval);
stream.destroy();
return;
});
stream.write(data);
i++;
},2000);
我想知道如何使用一个创建的流来覆盖文件内容。我尝试了另一种使用 Node 标准文件写入的方法。它可以完美地覆盖内容。但它在间隔内包含 fopen 和 fclose ,这似乎每次都非常昂贵。这是示例
方法二:
var fs = require('fs');
var ans = ["first","second","third","fourth","fifth"];
var i =0;
var writeInterval = setInterval(function(){
var data =ans[i%ans.length] ;
if(data.length == 0){
console.log("Failure in ");
}
var fopen_write = fs.open("curr.log", 'w', function(err, fd){
var buf = new Buffer(data, 'utf8');
fs.write(fd, buf, 0, buf.length, null, function(err) {
if (err) throw 'error writing file: ' + err;
fs.close(fd, function() {
console.log('wrote the file successfully');
});
});
})
i++;
},2000);
关于如何评估性能更好的方法的建议真的很有帮助。
感谢您的时间和努力!
【问题讨论】:
标签: javascript node.js fs node-streams