1 Star 0 Fork 0

陈迅/node-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
07-copy-file.js 2.37 KB
一键复制 编辑 原始数据 按行查看 历史
陈迅 提交于 2022-04-04 10:21 . feat: 添加备注
const fs = require('fs')
/**
* 因为copyFile是一次性操作;我们这里利用buffer实现文件拷贝自定义
* 01 打开 a 文件,利用 read 将数据保存到 buffer 暂存起来
* 02 打开 b 文件,利用 write 将 buffer 中数据写入到 b 文件中
*/
let buf = Buffer.alloc(10)
// 01 打开指定的文件
// fs.open('a.txt', 'r', (err, fd) => {
// // 03 开打 b 文件,用于执行数据写入操作
// fs.open('b.txt', 'w', (err, wfd) => { // 因为这里一次没有读完,再次执行就会出现多次open的情况
// // 02 从打开的文件中读取数据
// fs.read(fd, buf, 0, 10, 0, (err, readBytes, buffer) => {
// // 04 将 buffer 中的数据写入到 b.txt 当中
// fs.write(wfd, buf, 0, 10, 0, (err, written) => {
// console.log('写入成功');
// })
// })
// })
// })
// 02 数据的完全拷贝
// fs.open('a.txt', 'r', (err, fd) => {
// fs.open('b.txt', 'a+', (err, wfd) => { // 追加写入
// fs.read(fd, buf, 0, 10, 0, (err, readBytes, buffer) => {
// fs.write(wfd, buf, 0, 10, 0, (err, written) => {
// 这里因为有15个字符,还剩5个没有读完; 从第10个位置开始读
// fs.read(fd, buf, 0, 5, 10, (err, readBytes, buffer) => {
// fs.write(wfd, buf, 0, 5, 10, (err, written) => { // 从第10个位置开始写
// console.log('写入成功');
// })
// })
// })
// })
// })
// })
// 03 利用递归拷贝
const BUFFER_SIZE = buffer.length // 缓冲区长度
let readOffset = 0
fs.open('a.txt', 'r', (err, rfd) => {
fs.open('b.txt', 'w', (err, wfd) => {
function next() {
fs.read(rfd, buf, 0, BUFFER_SIZE, readOffset, (err, readBytes, buffer) => {
if (!readBytes) { // 当前读取到的字节数长度
// 如果条件成立,说明内容已经读取完毕
fs.close(rfd, () => { })
fs.close(wfd, () => { })
console.log('拷贝完成');
return
}
readOffset += readBytes
fs.write(wfd, buf, 0, readBytes, (err, written) => {
next()
})
})
}
next()
})
})
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chenxun98/node-study.git
git@gitee.com:chenxun98/node-study.git
chenxun98
node-study
node-study
master

搜索帮助