45 # 实现文件拷贝功能

news2024/11/23 18:59:48

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

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,添加内容:

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OPENCV 训练分类器一

第一步,安装OPENCV 见最新openCV-Python安装教程(opencv-python版本4.4.0, Python版本: 3.9)_python安装opencv_这个人不是画家的博客-CSDN博客 第二步,下面是修正过后的Python 将文件夹下面所有的图片转换成灰色小图像,用于存正片用的。…

Python几种字符串格式化方法

Python 字符串格式化方法 文章目录 Python 字符串格式化方法1.python中的字符串格式化--百分号 %2. 字符串格式化-数字精度控制 m.n3. 字符串格式化--快速写法 f"{变量}"4. 案例:股价计算小程序 1.python中的字符串格式化–百分号 % %的主要作用将数据转换…

android switch的使用

一、前言:很多app都有开关这个功能,开关控件的使用跟checkbox好像也差不多。 二、上代码 创建一个activity:SwitchDefaultActivity public class SwitchDefaultActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListene…

vue(脚手架创建)代理解决跨域问题

目录 为什么会出现跨域问题 什么是跨域 Vue CLI Vue2解决跨域问题 不重写路径 重写路径 vue.config.js代码 Vue3解决跨域问题 ViteVue解决跨域问题 vite.config.ts代码 总结 为什么会出现跨域问题 出于浏览器的同源策略的限制。同源策略是一种约定,它是…

【新版系统架构】第七章-系统架构设计基础知识(基于架构的软件开发方法)

软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论第二章-计算机系统基础知识(一)第二章-计算机系统基础知识(二)第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

【go】数据表转csv

文章目录 1 基本结构1.1 数据1.2 数据结构 2 代码3 tip 1 基本结构 1.1 数据 1.2 数据结构 2 代码 代码: package mainimport ("database/sql""encoding/csv""fmt"_ "github.com/go-sql-driver/mysql""log"&q…

element ui table某个单元格添加点击事件

1.创建表格 <el-table ref"multipleTable" :data"tableData" border > <el-table-column fixed type"selection" align"center"></el-table-column> <div v-for"(item,index) in columns" :key"i…

在开源经历中成长,让开发者成为创新主体

本文背景 积极推进“满天星”行动计划&#xff0c;促进开发者成长&#xff0c;重庆软件园产业学院“成长营”将聚焦“技术提升”“职业成长”“价值提升”等话题开展系列主题活动&#xff0c;赋能软件技术开发者更好发展、更快成长。本次直播访谈&#xff0c;聚焦在开源经历中成…

车载 Android开发面试习题

随着车联网技术的不断发展和普及&#xff0c;越来越多的汽车厂商开始使用 Android 操作系统作为车载娱乐和信息娱乐系统的核心。在这个趋势下&#xff0c;车载 Android 应用开发程序员的需求也日益增加。 像一些车企大厂不惜给出 30K~60K的高资&#xff0c;去广招这方面的技术人…

为未来“点亮”想象空间:无镉量子点

量子点电视的诞生引发了行业内的色彩科技革命&#xff0c;量子点电视使用色彩纯净的量子点背光技术&#xff0c;能够最真实地还原图像色彩&#xff0c;是虚拟增强现实技术和智能可穿戴显示设备的理想之选。 量子点又可称为纳米晶&#xff0c;是一种由 II-VI 族或 III-V 族元素…

matlab绘制栅格地图

学习了一下栅格地图在matlib中的表示方法&#xff0c;其实和很多都是差不多的。 参考 清除命令 % clc&#xff1a;清除命令窗口的内容&#xff0c;对工作环境中的全部变量无任何影响 % close all:关闭所有的Figure窗口 % clear all&#xff1a;清除工作空间的所有变量&#xff…

zookeeper之znode节点与acl权限设置

zookeeper之znode节点与acl权限设置 zookeeperznode节点节点类型节点属性节点监听 客户端命令行查看所有命令命令说明 acl权限设置scheme认证模型permission权限位acl相关命令ACL使用示例 客户端工具ZooInspectorPrettyZoo zookeeper ZooKeeper是Apache软件基金会的一个软件项目…

chatgpt赋能python:量化金融中的Python模型

量化金融中的Python模型 随着互联网的发展&#xff0c;金融行业也在不断地发生变化。量化金融是近年来崛起的一种新兴方式&#xff0c;它将数学、计算机科学和统计学等领域的理论和方法应用于金融领域中&#xff0c;以期望实现比传统投资更高的效益。其中&#xff0c;Python是…

计算机网络那些事之 MTU 篇 pt.2

哈喽大家好&#xff0c;我是咸鱼 在《计算机网络那些事之 MTU 篇 》中&#xff0c;咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU&#xff0c;则就会进行分片操作&#xff08;Fragment&#xff09;&#xff1b;如果小于 MTU&#x…

$.each用法

看到$ 自然可以想到这是JQ的一个方法JQ each可以当成是数组的forEach 具体用法&#xff1a;需要注意函数第一项是索引&#xff0c;第二项才是具体的值

React Hooks的讲解与教程

什么是React Hooks React Hooks 是 React 16.8 新增的一种特性&#xff0c;它可以让你在函数式组件中使用 state、生命周期、context 等 React 特性。Hooks 可以让你将复杂的逻辑拆分成多个独立可重用的函数&#xff0c;并且使得这些函数更加易于理解和测试。 Class组件存在的问…

Java的模块(module)

简单介绍 Java的模块&#xff08;module&#xff09;是Java SE 9支持的组件。一个模块可以包含多个包。通过模块系统&#xff0c;更加容易开发和维护大型的系统。引入模块的目标&#xff1a; 提供一种可靠的配置机制。用模块机制替换脆弱的、容易出错的类路径配置机制。模块作…

物化视图功能验证

物化视图(Materialized View)和视图(View)类似&#xff0c;也是一个视图名字对应一个SQL查询查询语句。不同之处在于&#xff1a;物化视图定义时使用了额外的关键字materialized&#xff0c; 它把结果集保存在起来&#xff0c;查询的时候直接读取保存的结果集&#xff0c;而不必…

力扣单调栈专题 739. 每日温度 496.下一个更大元素I 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形 步骤及C++实现 总结

文章目录 739. 每日温度496.下一个更大元素 I503.下一个更大元素II方法一 数组拼接方法二 模拟遍历两边nums 42. 接雨水双指针 暴力法双指针优化单调栈 84.柱状图中最大的矩形暴力解法双指针解法单调栈 总结 739. 每日温度 暴力解法&#xff0c;双层for循环&#xff0c;时间复杂…