pipe() 后 'finish' 上的 nodejs 空文件

nodejs empty file on 'finish' after pipe()

我将一个可读流写入一个文件,想知道它何时完成,以便我可以访问磁盘上的文件。 我听 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) { /*...*/ }
});