zoukankan      html  css  js  c++  java
  • nodejs 文件拷贝

    小文件拷贝

    我们使用NodeJS内置的fs模块简单实现这个程序如下。

    var fs = require('fs');
    
    function copy(src, dst) {
        fs.writeFileSync(dst, fs.readFileSync(src));
    }
    
    function main(argv) {
        copy(argv[0], argv[1]);
    }
    
    main(process.argv.slice(2));

    以上程序使用fs.readFileSync从源路径读取文件内容,并使用fs.writeFileSync将文件内容写入目标路径。

    豆知识: process是一个全局变量,可通过process.argv获得命令行参数。由于argv[0]固定等于NodeJS执行程序的绝对路径,argv[1]固定等于主模块的绝对路径,因此第一个命令行参数从argv[2]这个位置开始。

    大文件拷贝

    上边的程序拷贝一些小文件没啥问题,但这种一次性把所有文件内容都读取到内存中后再一次性写入磁盘的方式不适合拷贝大文件,内存会爆仓。对于大文件,我们只能读一点写一点,直到完成拷贝。因此上边的程序需要改造如下。

    var fs = require('fs');
    
    function copy(src, dst) {
        fs.createReadStream(src).pipe(fs.createWriteStream(dst));
    }
    
    function main(argv) {
        copy(argv[0], argv[1]);
    }
    
    main(process.argv.slice(2));

    以上程序使用fs.createReadStream创建了一个源文件的只读数据流,并使用fs.createWriteStream创建了一个目标文件的只写数据流,并且用pipe方法把两个数据流连接了起来。连接起来后发生的事情,说得抽象点的话,水顺着水管从一个桶流到了另一个桶。

  • 相关阅读:
    log&& buffevent&&内存池 1
    ngx内存池设计概阅
    读 perf 笔记 简写
    smaps 使用&& 内存泄露
    cache占用高 文件delete cache
    工具小用法 dropwatch ss perf
    golang 读书笔记 数据类型
    重看ebpf 通信&&数据结构分析
    TCP 发送缓冲区问题--根本原因是gso引起 转载
    重看ebpf -代码载入执行点-hook
  • 原文地址:https://www.cnblogs.com/c-x-a/p/5460835.html
Copyright © 2011-2022 走看看