我使用appendFile方法将内容附加到文件中。以下是该代码的过度简化版本.解释这个问题就足够了。我的问题是,如果进程被终止,文件的内容将滞后于通过appendFile编写的最后一次数据。换句话说,传递给fs.appendFile的所有数据都不会被写入磁盘。如何克服这一限制?我不喜欢使用任何fs方法的同步版本。
fs = require('fs');
myVal = 1;
setInterval (function() {
++myVal;
fs.appendFile("/tmp/test.d", myVal +":",'utf8', function(err) {
console.log(myVal);
});
}, 10000);~
发布于 2017-02-16 16:07:18
您不能在调用本身中这样做,但是您当然可以调用fs.fdatasync()来刷新上一次对磁盘的写入。为此,必须将appendFile调用更改为使用以前打开的文件描述符,而不是字符串文件名,因此最后将执行三个步骤:
// Open the file
fs.open(filename, "a+",(err, fd) => {
// Write our data
fs.writeFile(fd, data, (err) => {
// Force the file to be flushed
fs.fdatasync(fd /*, optional callback here */);
});
});完成文件后,请确保关闭该文件。就我个人而言,当appendFileSync这样一个简单而明显的选项正是为此目的存在时,我怀疑这种方法的价值。它将使程序更难理解,而不实际增加任何价值。
但它会成功的。
https://stackoverflow.com/questions/42277513
复制相似问题