我的问题是我无法确定何时成功写入文件且文件已关闭。考虑以下情况:
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.
});
});
那么,在访问文件之前,如何强制或以其他方式确保文件已正确刷新?我需要确保文件存在且完整,因为我的代码必须生成一个外部进程来读取和处理文件。
答案 0 :(得分:8)
在writeable stream's
close
事件中进行文件的后处理:
outs.on('close', function() {
<<spawn your process>>
});
此外,destroySoon
之后不需要end
,one and the same。
答案 1 :(得分:0)
查看https://github.com/TomFrost/FlushWritable - 我不知道为什么它没有写入Writable核心,但这应该可以解决问题。
此外,还有一个讨论在GitHub https://github.com/nodejs/node-v0.x-archive/issues/7348上进行讨论。