我正在使用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/

10-09 23:10