我正在使用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);
〜
最佳答案
您不能在调用本身中执行此操作,但可以肯定地调用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
这样简单而明显的选项正是为此目的而存在时,我质疑这种方法的值(value)。如果不实际增加任何值(value),它将使程序更加难以理解。但这会起作用。
关于node.js - 如何使Node.js的fs.appendFile方法立即刷新到磁盘?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42277513/