Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件


Posted in Javascript onSeptember 18, 2017

实现代码一:

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
})

文章到此结束,希望有帮助的朋友多多支持三水点靠木。

Javascript 相关文章推荐
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
Apr 12 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
使用js对select动态添加和删除OPTION示例代码
Aug 12 Javascript
JS通过相同的name进行表格求和代码
Aug 18 Javascript
js下拉菜单语言选项简单实现
Sep 23 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
jQuery制作仿Mac Lion OS滚动条效果
Feb 10 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
详解axios在vue中的简单配置与使用
May 10 Javascript
JS块级作用域和私有变量实例分析
May 11 Javascript
关于angular引入ng-zorro的问题浅析
Sep 09 Javascript
为什么我们要做三份 Webpack 配置文件
Sep 18 #Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 #Javascript
十个免费的web前端开发工具详细整理
Sep 18 #Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 #Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 #Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 #Javascript
Web技术实现移动监测的介绍
Sep 18 #Javascript
You might like
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php 启动报错如何解决
2014/01/17 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
js面向对象的写法
2016/02/19 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python中防止sql注入的方法详解
2017/02/25 Python
Sublime开发python程序的示例代码
2018/01/24 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python for和else语句趣谈
2019/07/02 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
pytorch SENet实现案例
2020/06/24 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
一些PHP的面试题
2015/05/06 面试题
文秘档案管理岗位职责
2014/03/06 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
个人业务学习心得体会
2016/01/25 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
python中filter,map,reduce的作用
2022/06/10 Python