45 # 实现文件拷贝功能

简介: 45 # 实现文件拷贝功能

下面实现边读边写的文件拷贝功能,这样不会淹没系统的可用内存,合理读写

const fs = require("fs");
const path = require("path");
function copy(source, target, callback) {
    const SIZE = 3;
    const buffer = Buffer.alloc(SIZE);
    let readOffset = 0;
    let writeOffset = 0;
    // rfd 这个是文件描述符,是一个数字,是 Linux 规定的,windows 是从 3 开始
    fs.open(source, "r", (err, rfd) => {
        if (err) return callback(err);
        // wfd 是写文件的描述符
        fs.open(target, "w", (err, wfd) => {
            if (err) return callback(err);
            // 异步迭代需要 next,写完之后继续执行相同的逻辑
            const next = () => {
                // bytesRead 读取到的个数
                fs.read(rfd, buffer, 0, SIZE, readOffset, (err, bytesRead) => {
                    if (err) return callback(err);
                    // 更改读取偏移量
                    readOffset += bytesRead;
                    // 读取到几个就往文件中添加几个
                    fs.write(
                        wfd,
                        buffer,
                        0,
                        bytesRead,
                        writeOffset,
                        (err, written) => {
                            if (err) return callback(err);
                            // 更改写入偏移量
                            writeOffset += written;
                            // 判断是否需要继续下一步读取
                            if (bytesRead == SIZE) {
                                next();
                            } else {
                                // 完成后的操作
                                fs.close(rfd);
                                fs.close(wfd);
                                callback();
                            }
                        }
                    );
                });
            };
            next();
        });
    });
}
copy(
    path.resolve(__dirname, "./45/name.txt"),
    path.resolve(__dirname, "./45/copy.txt"),
    (err) => {
        if (err) throw err;
        console.log("拷贝成功");
    }
);

新建一个文件 name.txt,添加内容:

人生的意义,在于承担人生无意义的勇气。如果你一直在找人生的意义,你永远不会生活。

执行上面代码,我们就能进行文件的拷贝

目录
相关文章
文件复制操作
文件复制操作
65 0
|
缓存 Windows
FastCopy--几乎是Windows平台最快的文件拷贝、删除软件
Windows系统中,因为默认缓存太小又无法修改,在多线程处理时也容易出现协同作业不完美的情况,很容易出现速度瓶颈,所以有时候我们复制大文件的时候,速度会很慢
639 0
|
Windows
windows 技术篇 - cmd命令查看当前目录下的所有文件和文件夹以及所有子目录下的文件,dir命令的使用方法
windows 技术篇 - cmd命令查看当前目录下的所有文件和文件夹以及所有子目录下的文件,dir命令的使用方法
3528 0
windows 技术篇 - cmd命令查看当前目录下的所有文件和文件夹以及所有子目录下的文件,dir命令的使用方法
|
开发者 Python
文件拷贝功能 | 学习笔记
快速学习 文件拷贝功能
112 0
文件拷贝功能 | 学习笔记
|
Windows
Win系统 - 文件夹或文件已在另一程序中打开怎么办?
Win系统 - 文件夹或文件已在另一程序中打开怎么办?
581 0
Win系统 - 文件夹或文件已在另一程序中打开怎么办?
|
Linux 数据安全/隐私保护
linux 跨服务器拷贝文件夹
linux 跨服务器拷贝文件夹
linux 跨服务器拷贝文件夹
压缩软件能否加上忽略某些目录的功能
压缩软件能否加上忽略某些目录的功能
135 0
远程文件拷贝
命令一:scp scp -r root@101.xxx.xxx.xxx:/fantj/projects . 以root身份复制101.xxx.xxx.xxx服务器下/fantj/projects下的所有内容 命令二:rsync (remote synchronezition) 和命令一的不同点: 增量复制,不会复制已有的文件。
616 0