• 使用 node 实现一个 copy 文件夹的函数


    node 没有提供直接拷贝文件夹的 api, 下面使用现有的 fs 模块 api 实现一个 copy 文件夹的函数。

    思路

    通过
    fs.copyFileSync() ,
    fs.mkdirSync(),
    fs.readdirSync()
    递归实现拷贝文件夹。

    代码:

    const fs = require('fs')
    const path = require('path')
    
    //判断是否文件夹
    function isFile(path) {
      return fs.statSync(path).isFile()
    }
    
    // copy 文件
    function copyFile(src, dest) {
      const folderPath = path.parse(dest).dir
      // 文件夹是否存在
      if (!fs.existsSync(folderPath)) {
        // 不存在 (递归创建文件夹)
        fs.mkdirSync(folderPath, { recursive: true })
      }
      fs.copyFileSync(src, dest)
    }
    
    // copy 文件夹
    function copyFolder(source, dest) {
      const sourcePath = path.resolve(source)
      const destPath = path.resolve(dest)
      // 原路径是否存在
      if (!fs.existsSync(sourcePath)) {
        return console.log('source path does not exist')
      }
      // 源路径存在
      // 判断源路径是否时文件
      if (isFile(sourcePath)) {
        // 是文件
        copyFile(sourcePath, destPath)
      } else {
        // 是文件夹
        fs.readdirSync(sourcePath)
          .forEach(item => {
            const fullPath = path.join(sourcePath, item)
            if (fs.statSync(fullPath).isFile()) {
              copyFile(fullPath, path.join(destPath, item))
            } else {
              // 文件夹 (进行递归)
              copyFolder(fullPath, path.join(destPath, item))
            }
          })
      }
    }
    /*
    test
    
    copyFolder('./foo', './demo')
    // 或
    copyFolder('C:\Users\foo', 'C:\Users\demo')
    */
    
    module.exports = {
      copyFolder
    }
    
    

    测试

    foo
     |--- bar
     |     |--- bar.js
     |--- foo.js
    

    执行 copyFolder('./foo', './demo')

    demo
     |--- bar
     |     |--- bar.js
     |--- foo.js
    

    这样就简单实现了一个 copy 文件夹的 函数,这个 copyFolder 可能还有其它问题,没有细搞。

    推荐 npm 包

    cpr

    fs-extra

  • 相关阅读:
    牛客 4C Alliances (dfs序)
    AC日记——楼房 codevs 2995
    AC日记——丑数 codevs 1246
    AC日记——砍树 codevs 1388
    AC日记——地鼠游戏 codevs 1052
    AC日记——蓬莱山辉夜 codevs 2830
    AC日记——最小的N个和 codevs 1245
    AC日记——二叉堆练习3 codevs 3110
    AC日记——滑动窗口 洛谷 P1886
    AC日记——忠诚 洛谷 P1816
  • 原文地址:https://www.cnblogs.com/taohuaya/p/14793153.html
Copyright © 2020-2023  润新知