nodejs空文件'完成'管道后()

时间:2015-09-17 15:26:38

标签: 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) { /*...*/ }
});

2 个答案:

答案 0 :(得分:1)

当所有数据都写入流时会发出finish事件,但此时文件可能无法关闭。您可以监听文件处理程序关闭后发出的close事件。

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

答案 1 :(得分: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) { /*...*/ }
});