nodejs空文件在pipe()之后'finish'上

问题描述 投票:3回答:2

我将可读流写入文件,并想知道何时完成,因此我可以访问磁盘上的文件。我侦听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) { /*...*/ }
});
node.js stream fs
2个回答
1
投票

finish事件在所有数据都写入流中时发出,但此时文件可能未关闭。您可以监听close事件,该事件在文件处理程序关闭后发出。

ws.once('close', function() {
    try {
        stat = fs.statSync(path);
    }
    catch (err) { /*...*/ }
});

0
投票

正确的捕获事件示例

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) { /*...*/ }
});
© www.soinside.com 2019 - 2024. All rights reserved.