欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-14 18:49:09
实现代码一: var fs = require('fs') var path = require('path') var copyfile = func...

实现代码一:

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

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