【发布时间】:2015-12-14 13:18:54
【问题描述】:
我将可读流写入文件并想知道它何时完成,以便我可以访问磁盘上的文件。
我收听finish 事件,但是当我在侦听器中执行stat 时,文件大小为0。经过一些延迟后,大小是正确的。
这是正常行为吗?
根据docs,当所有数据都已刷新到底层系统时触发事件。
var ws = fs.createWriteStream(path);
file.pipe(ws); // file is a readable stream
ws.on('finish', function() {
try {
stat = fs.statSync(path); // stat.size: 0
}
catch (err) { /*...*/ }
});
【问题讨论】:
-
你可以试试异步
fs.stat方法吗? nodejs.org/api/fs.html#fs_fs_stat_path_callback -
为什么异步版本会不同?
stat只是为了显示问题,我想做gm(path),因为空文件而失败。 -
既然你说它稍后会起作用,我想知道是否存在一个错误,即当事件循环上有其他 JS 命令时该事件被触发太快(完成写入文件)。异步版本将使任何待处理的命令完成。不是真正的答案,但可以提供有关潜在问题的更多详细信息。
-
我尝试了异步
stat并得到了相同的结果。