Node.js 无法使用节点中的createWriteStream()将数据附加到文件

Node.js 无法使用节点中的createWriteStream()将数据附加到文件,node.js,Node.js,我无法使用节点中的createWriteStreams()从多个读取流中追加数据。 它只是在每次迭代后创建一个新文件 chunkNo = 4; for (i = 0; i < chunkNo; i++) { const response = await this.downloadChunk(downloadUrl, i); // response.data is a ReadStream await new Promise<void>((resolve, r

我无法使用节点中的createWriteStreams()从多个读取流中追加数据。 它只是在每次迭代后创建一个新文件

chunkNo = 4;

for (i = 0; i < chunkNo; i++) { 
    const response = await this.downloadChunk(downloadUrl, i); // response.data is a ReadStream
    await new Promise<void>((resolve, reject) => {
          const stream = response.data.pipe(fs.createWriteStream('C:\\big_file.mkv'), { flags: 'a'});
          stream.on('finish', () => {
            resolve();
          });
        });
}
chunkNo=4;
对于(i=0;i{
const stream=response.data.pipe(fs.createWriteStream('C:\\big_file.mkv'),{flags:'a'});
stream.on('finish',()=>{
解决();
});
});
}
我错过了什么?即使append标志在那里。
提前感谢您

为了更好地巩固您对
a
(append)标志用途的直觉,请首先查看以下答案:

它详细说明了文件可以
打开的不同模式。与许多其他语言一样,JavaScript重用了与C中相同的原则

从本手册页中,我们案例中的相关部分为:

 ``a''   Open for writing.  The file is created if it does not exist.  The
         stream is positioned at the end of the file.  Subsequent writes
         to the file will always end up at the then current end of file,
         irrespective of any intervening fseek(3) or similar.
因此,在您的代码示例中,循环的每次迭代都会创建一个新文件。 因此,您可以将
fs.createWriteStream('C:\\big_file.mkv',{flags:'a'})
移动到for循环之外,为该可读流分配一个名称,并将其用于
管道()
,具体如下:

chunkNo=4;
const dest=fs.createWriteStream('C:\\big_file.mkv',{flags:'a'});
对于(i=0;i{
常量流=响应.数据.管道(dest);
stream.on('finish',()=>{
解决();
});
});
}

谢谢@Delapouite的建议,但是我尝试了这个方法,在第二次迭代中尝试管道时收到一个错误:“[ERR\u STREAM\u WRITE\u AFTER\u END]:WRITE AFTER END”。似乎它关闭了文件。我还尝试在createWriteStream选项中添加{autoClose:false},并在循环后关闭它,但仍然是一样的。