节点:如何等到文件完成再处理



我的问题是我无法确定文件何时成功写入并且文件已关闭。请考虑以下情况:

var fs = require('fs');
var outs = fs.createWriteStream('/tmp/file.txt');
var ins = <some input stream>
...
ins.on('data', function(chunk) { out.write(chunk); });
...
ins.on('end', function() {
   outs.end();
   outs.destroySoon();
   fs.stat('/tmp/file.txt', function(err, info) {
      // PROBLEM: Here info.size will not match the actual number of bytes.
      // However if I wait for a few seconds and then call fs.stat the file has been flushed.
   });
});

那么,如何强制或以其他方式确保文件在访问之前已正确刷新文件?我需要确保文件在那里并且完整,因为我的代码必须生成一个外部进程来读取和处理文件。

writeable stream's close事件中对文件进行后期处理:

outs.on('close', function() {
  <<spawn your process>>
});

此外,end后不需要destroySoon,它们是一回事。

查看 https://github.com/TomFrost/FlushWritable – 我不知道为什么它没有写入可写核心,但这应该可以解决问题。

此外,在 GitHub https://github.com/nodejs/node-v0.x-archive/issues/7348 上也有一个讨论。

相关内容

  • 没有找到相关文章

最新更新