我将可读流写入文件,并想知道何时完成,因此我可以访问磁盘上的文件。我侦听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) { /*...*/ }
});
finish
事件在所有数据都写入流中时发出,但此时文件可能未关闭。您可以监听close
事件,该事件在文件处理程序关闭后发出。
ws.once('close', function() {
try {
stat = fs.statSync(path);
}
catch (err) { /*...*/ }
});
正确的捕获事件示例
var ws = fs.createWriteStream(path);
var stream = file.pipe(ws); // file is a readable stream
stream.on('finish', function() {
try {
stat = fs.statSync(path); // stat.size: 0
}
catch (err) { /*...*/ }
});