node.js - pipe()后 'finish'上的nodejs空文件

标签 node.js stream fs

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

关于node.js - pipe()后 'finish'上的nodejs空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634260/

相关文章:

node.js - 在 Nodejs 中使用 setInterval() 发出 post 请求

java - 流中的套接字服务器流消息是混合的

wcf - 将流保存到文件

node.js - 构建后无法在 Electron 应用程序中写入文件

node.js - 无法在Windows机器上制作redis

node.js - Node : How to avoid hardcoding URLs in views?

javascript - 与缓存SVG数据相比,从磁盘读取SVG图标文件?

node.js - Node 的 fs.symlink() 认为链接已经存在;绝对不会

javascript - 等待不等待

python - 限制附加到数组的元素数量 - Python