Nodejs文件覆盖、追加、读取、全量复制(异步版本)

逻辑类中包含了,文件的:更新覆盖;内容追加;读取;全部复制。

所有方法都是异步的,如果需要同步则需要修改fs的方法,并使用Promise进行包装,另外需要注意,全部复制的方法需要传入两个目录,不带文件的path,并且是有最大文件打开数量限制的,如果是大文件但文件数量较少则适合使用,如果是小文件且数量大,则不适合,建议进行先打成压缩包,再进行传输。

如果需要同步版本,可以参考:https://blog.csdn.net/nickDaDa/article/details/102375966

逻辑处理类的实现:syncdata.js

const fs = require("fs");

// local path
const conf = require("./conf.json");

/**
 * update file
 * @param   res  to update content
 * @returns update operation result
 */
function updateResFile (res) {
    return fs.writeFileSync(`${conf['workdir']}${conf['res']}`, res);
}

/**
 * break line append log
 * @param log log content
 * @returns append operation result
 */
function appendFile (log) {
    if ("windows" == conf['os']) {
        log+='\r\n';
    } else {
        log+='\n';
    }
    return fs.appendFileSync(`${conf['workdir']}${conf['log']}`, log);
}

/**
 * handle directory
 * @param {*} src 
 * @param {*} dst 
 * @param {*} callback 
 */
function handleDir(src, dst) {
    fs.access(dst, fs.constants.F_OK, (err) => {
        if (err) {
            fs.mkdirSync(dst);
            copyDir(src, dst);
        } else {
            copyDir(src, dst);
        }
    });
}

/**
 * execute iterator copy directory
 * @param src directory source path
 * @param dst directory destination path
 * @returns copy result
 */
function copyDir (src, dst) {
    // read file path sync
    let paths = fs.readdirSync(src);
    paths.forEach(function(path){
      var _src=src+'/'+path;
      var _dst=dst+'/'+path;
      
      //stats object, include its own attribute
      fs.stat(_src,function(err,stats){
        if(err) {
            console.log(`copyDir failed, caused by ${JSON.stringify(err)}`);
            return false;
        } else if(stats.isFile()){
          let readable=fs.createReadStream(_src);
          let writable=fs.createWriteStream(_dst);
          readable.pipe(writable);
        }else if(stats.isDirectory()){
          handleDir(_src, _dst, copyDir);
        }
      });
    });
    return true;
}

/**
 * read file sync
 * @param path filefullpath
 * @returns file content
 */
function readFile (path) {
    return fs.readFileSync(path, conf['encode']);
}

/**
 * main entrance
 */
function syncFile () {
    // test code here
}

// call
syncFile ();

同一目录下的配置文件conf.json

{
    "os" : "windows",
    "encode" : "utf-8",
    "workdir" : "/home/",
    "latestVersion" : "latestVersion.txt",
    "currentVersion" : "currentVersion.txt",
    "log" : "log.txt",
    "res" : "syncResult.txt",
    "copySrc" : "/copySrc/",
    "copyDst" : "/copyDst/",
    "success-text" : "success",
    "fail-text" : "fail",
    "dateformat" : "YYYY-MM-DD"
}

执行方式:

cd到syncdata.js同一级目录,执行,

node syncdata.js

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值