在Node.js中,要实现目录文件夹的循环递归复制也非常简单,使用fs模块即可,仅需几行,而且性能也不错,我们先来实现文件的复制,需要的朋友可以参考下

实现代码一:

var fs  = require('fs')
var path = require('path')

var copyFile = function(srcPath, tarPath, cb) {
 var rs = fs.createReadStream(srcPath)
 rs.on('error', function(err) {
  if (err) {
   console.log('read error', srcPath)
  }
  cb && cb(err)
 })

 var ws = fs.createWriteStream(tarPath)
 ws.on('error', function(err) {
  if (err) {
   console.log('write error', tarPath)
  }
  cb && cb(err)
 })
 ws.on('close', function(ex) {
  cb && cb(ex)
 })

 rs.pipe(ws)
}

复制目录及其子目录

var copyFolder = function(srcDir, tarDir, cb) {
 fs.readdir(srcDir, function(err, files) {
  var count = 0
  var checkEnd = function() {
   ++count == files.length && cb && cb()
  }

  if (err) {
   checkEnd()
   return
  }

  files.forEach(function(file) {
   var srcPath = path.join(srcDir, file)
   var tarPath = path.join(tarDir, file)

   fs.stat(srcPath, function(err, stats) {
    if (stats.isDirectory()) {
     console.log('mkdir', tarPath)
     fs.mkdir(tarPath, function(err) {
      if (err) {
       console.log(err)
       return
      }

      copyFolder(srcPath, tarPath, checkEnd)
     })
    } else {
     copyFile(srcPath, tarPath, checkEnd)
    }
   })
  })

  //为空时直接回调
  files.length === 0 && cb && cb()
 })
}

使用时

copyFolder('...', '....', function(err) {
 if (err) {

  return
 }

 //continue
})

文章到此结束,希望有帮助的朋友多多支持爱安网。

最新资讯
B站:将严格限制马保国相关内容 不给恶意炒作者可乘之机

B站:将严格限制马保国

自即日起将严格限制、审核、管理马保国相关视频内容。
嫦娥五号探测器成功实施“刹车”制动,顺利进入环月轨道飞行

嫦娥五号探测器成功实

北京时间11月28日20时58分,嫦娥五号探测器经过约112小
我在长沙待了7天 亲历社区团购巨头如何打巷战

我在长沙待了7天 亲历

这是一场硝烟四起的围剿战。互联网巨头围剿的目标是长
后疫情时代 PC游戏依然“混吃等死”?

后疫情时代 PC游戏依

2020年的PC游戏市场的表现不是很让人满意。
又一家造车新势力计划IPO:零跑汽车或将明年下半年登陆科创板

又一家造车新势力计划

蔚来、理想、小鹏股价上涨、市值冲高,威马、合众纷纷提
智联招聘郭盛:坏企业把员工当成本 好企业专注磨炼组织力

智联招聘郭盛:坏企业把

在郭盛看来,坏的企业把员工当成本,在通过裁员降薪控制成
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,