const fs = require('fs');
const path = require('path');
const { pipeline } = require('stream');
const util = require('util');
const copyFile = async (sourcePath, targetPath) => {
try {
const readableStream = fs.createReadStream(sourcePath);
const writableStream = fs.createWriteStream(targetPath);
await util.promisify(pipeline)(readableStream, writableStream);
console.log('文件复制成功');
} catch (err) {
console.error('文件复制失败:', err.message);
}
};
// 示例调用
copyFile('source.txt', 'target.txt');
使用流优化性能说明
- 创建可读流:
fs.createReadStream(sourcePath)
会创建一个可读流,它不会一次性将整个文件读入内存,而是按块读取,这样可以显著减少内存的使用,特别适合处理大文件。
- 创建可写流:
fs.createWriteStream(targetPath)
创建一个可写流,用于将读取到的数据块按顺序写入目标文件。
- 管道操作:
pipeline
方法将可读流和可写流连接起来,它会自动处理数据从可读流到可写流的流动,并且会在数据传输完成或者出错时进行相应的处理。util.promisify(pipeline)
将 pipeline
方法转化为返回 Promise 的形式,使得我们可以使用 async/await
来优雅地处理异步操作和错误。通过这种方式,数据可以高效地从源文件传输到目标文件,而不会占用过多内存。