我希望能够使用node.js和pipe
方法监控复制的速度,以便显示进度条、速度指示器并最终估计时间。
目前,在查看一些参考资料时,我认为我将不得不使用writeStream.bytesWritten进行操作,但我不确定如何正确使用它:它是否与 pipe
一起工作?还是我必须使用writableStream.write();
?
一些背景:
由于需要复制多个文件,我使用一个do ... while
循环,并在每次启动复制时增加计数器。它运行得很好,但我无法使用writeStream.bytesWritten
来监视传输速率。
下面是我目前正在使用的代码,console.log(firstCopy.bytesWritten);
两次返回0
:
//Launch copy process
do {
let readableStream = fs.createReadStream(fileList[i]);//This is the source file
let firstCopy = fs.createWriteStream(path.join(copyPathOne, fileName[i])),
secondCopy = fs.createWriteStream(path.join(copyPathTwo, fileName[i]));//These are the targets
readableStream.pipe(firstCopy);//We launch the first copy
readableStream.pipe(secondCopy);//And the second copy
console.log(firstCopy.bytesWritten);//Here we monitor the amount of bytes written
++i;//Then we increment the counter
} while (i < fileList.length);//And we repeat the process while the counter is < to the number of files
我也尝试过以下方法:
console.log(writeStream.bytesWritten(firstCopy));//Error: writeStream is not defined
为什么要用do ... while
而不是forEach
?
我正在遍历一个数组。我本可以使用forEach
,但由于我并不清楚它的工作原理,所以我选择了使用do ... while
。此外,我认为这将是一个简单的方法来复制每个文件,并且它会等待复制结束(pipe
),如此所述:
在每次通过循环时计算的表达式。如果条件评估为true,则重新执行语句。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while
fs.statSync()
来计算进度,但决定让你自己来完成。 - Aramil Rey