我正在使用appendFile方法将内容附加到文件中。以下是该代码的过度简化版本。它足以解释这个问题。 我的问题是,如果进程被终止,文件的内容将滞后于通过appendFile写入的最后一个数据。换句话说,传递给fs.appendFile以获取附加的所有数据都不会写入磁盘。如何解决这个限制?我不希望使用任何fs方法的 sync 版本
fs = require('fs');
myVal = 1;
setInterval (function() {
++myVal;
fs.appendFile("/tmp/test.d", myVal +":",'utf8', function(err) {
console.log(myVal);
});
}, 10000);
〜
答案 0 :(得分:4)
您无法在呼叫本身中执行此操作,但您当然可以调用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
这样一个简单明了的选项恰好存在于此目的时,我质疑这种方法的价值。它会使程序更难理解,而不会实际添加任何值。
但它会奏效。