zoukankan      html  css  js  c++  java
  • 使用 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

  • 相关阅读:
    硬盘任性丢数据,但分布式存储一定可靠吗?
    Service的基本组成
    固定cell.imageView.image的大小
    剪贴板服务
    取得正在运行的Activity
    取得正在运行的服务
    C#.NET学习笔记1---C#.NET简介
    取得手机的网络信息
    四、cocos2dx动画Animation介绍
    C#.NET学习笔记2---C#.第一个C#程序
  • 原文地址:https://www.cnblogs.com/taohuaya/p/14793153.html
Copyright © 2011-2022 走看看