最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node刪除、復制文件或文件夾示例代碼

 更新時間:2019年08月13日 11:10:37   作者:hewitt  
這篇文章主要給大家介紹了關于node刪除、復制文件或文件夾的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

注意:在win10,v10.16.1 環(huán)境運行無問題

首先引入相關包(會在使用處具體說明):

const fs = require('fs')
const path = require('path')
const child_process = require('child_process')
const fsEx = require('fs-extra')
/**
 * @des 該包為實驗性API
 */
const fsPromises = require('fs').promises

對文件的操作

復制文件

這里列出三種方式:

  1. 使用 writeFileSync 和 readFileSync 結(jié)合
  2. 使用 copyFileSync
  3. 使用promises的copyFile方法

其中的同步或異步方法可酌情更改,實現(xiàn)代碼如下

/**
 * @param { copiedPath: String } (被復制文件的地址,相對地址)
 * @param { resultPath: String } (放置復制文件的地址,相對地址)
 */
function copyFile(copiedPath, resultPath) {
 copiedPath = path.join(__dirname, copiedPath)
 resultPath = path.join(__dirname, resultPath)

 try {
  /**
   * @des 方式一
   */
  // fs.writeFileSync(resultPath, fs.readFileSync(copiedPath))
  /**
   * @des 方式二
   */
  // fs.copyFileSync(copiedPath, resultPath)
  console.log('success');
 } catch (error) {
  console.log(error);
 }
 /**
  * @des 方式三
  */
 fsPromises.copyFile(copiedPath, resultPath)
  .then(() => {
   console.log('success');
  }).catch((err) => {
   console.log(err);
  });
}

刪除文件

使用 unlinkSync 方法,實現(xiàn)代碼如下

/**
 * @param { delPath:String } (需要刪除文件的地址)
 * @param { direct:Boolean } (是否需要處理地址)
 */
function deleteFile(delPath, direct) {
 delPath = direct ? delPath : path.join(__dirname, delPath)
 try {
  /**
   * @des 判斷文件或文件夾是否存在
   */
  if (fs.existsSync(delPath)) {
   fs.unlinkSync(delPath);
  } else {
   console.log('inexistence path:', delPath);
  }
 } catch (error) {
  console.log('del error', error);
 }
}

對文件夾(目錄)的操作

以下代碼有引用,復制文件相關方法

復制文件夾

使用了兩種方式:

  • child_process
  • 遞歸的讀取文件和文件夾再在指定地址創(chuàng)建

實現(xiàn)代碼和釋意如下:

/**
 * @des 參數(shù)解釋同上
 */
function copyFolder(copiedPath, resultPath, direct) {
  if(!direct) {
    copiedPath = path.join(__dirname, copiedPath)
    resultPath = path.join(__dirname, resultPath)
  }

  function createDir (dirPath) {
    fs.mkdirSync(dirPath)    
  }

  if (fs.existsSync(copiedPath)) {
    createDir(resultPath)
    /**
     * @des 方式一:利用子進程操作命令行方式
     */
    // child_process.spawn('cp', ['-r', copiedPath, resultPath])

    /**
     * @des 方式二:
     */
    const files = fs.readdirSync(copiedPath, { withFileTypes: true });
    for (let i = 0; i < files.length; i++) {
      const cf = files[i]
      const ccp = path.join(copiedPath, cf.name)
      const crp = path.join(resultPath, cf.name) 
      if (cf.isFile()) {
        /**
         * @des 創(chuàng)建文件,使用流的形式可以讀寫大文件
         */
        const readStream = fs.createReadStream(ccp)
        const writeStream = fs.createWriteStream(crp)
        readStream.pipe(writeStream)
      } else {
        try {
          /**
           * @des 判斷讀(R_OK | W_OK)寫權(quán)限
           */
          fs.accessSync(path.join(crp, '..'), fs.constants.W_OK)
          copyFolder(ccp, crp, true)
        } catch (error) {
          console.log('folder write error:', error);
        }

      }
    }
  } else {
    console.log('do not exist path: ', copiedPath);
  }
}

刪除文件夾

遞歸文件和文件夾,逐個刪除

實現(xiàn)代碼如下:

function deleteFolder(delPath) {
  delPath = path.join(__dirname, delPath)

  try {
    if (fs.existsSync(delPath)) {
      const delFn = function (address) {
        const files = fs.readdirSync(address)
        for (let i = 0; i < files.length; i++) {
          const dirPath = path.join(address, files[i])
          if (fs.statSync(dirPath).isDirectory()) {
            delFn(dirPath)
          } else {
            deleteFile(dirPath, true)
          }
        }
        /**
        * @des 只能刪空文件夾
        */
        fs.rmdirSync(address);
      }
      delFn(delPath);
    } else {
      console.log('do not exist: ', delPath);
    }
  } catch (error) {
    console.log('del folder error', error);
  }
}

執(zhí)行示例

目錄結(jié)構(gòu)

|- index.js(主要執(zhí)行代碼)
|- a
    |- a.txt
    |- b.txt
|- c
    |- a.txt
    |- b.txt
|- p
    |- a.txt
    |- b.txt

根據(jù)傳入的參數(shù)不同,執(zhí)行相應的方法

/**
 * @des 獲取命令行傳遞的參數(shù)
 */
const type = process.argv[2]

function execute() {
  /**
   * @des 請根據(jù)不同的條件傳遞參數(shù)
   */
  if (type === 'copyFile') {
    copyFile('./p/a.txt', './c/k.txt')
  }

  if (type === 'copyFolder') {
    copyFolder('./p', './a')
  }

  if (type === 'delFile') {
    deleteFile('./c/ss.txt')
  }

  if (type === 'delFolder') {
    deleteFolder('./a')
  }
}

execute()

命令行傳參數(shù)

/**
 * @des 命令行傳參
 * 執(zhí)行 node ./xxx/index.js 111 222
 * 輸出:
 * 0: C:\Program Files\nodejs\node.exe
 * 1: G:\GitHub\xxx\xxxx\index.js
 * 2: 111
 * 3: 222
 */
process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
});

利用 fs-extra 實現(xiàn)

這是對fs相關方法的封裝,使用更簡單快捷

/**
 * @des fs-extra 包實現(xiàn)
 * api參考: https://github.com/jprichardson/node-fs-extra
 */

function fsExtra() {
  async function copy() {
    try {
      await fsEx.copy(path.join(__dirname + '/p'), path.join(__dirname + '/d'))
      console.log('success');
    } catch (error) {
      console.log(error);
    }
  }

  copy()
}

可執(zhí)行源碼: github.com/NameHewei/n

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    現(xiàn)在我們可以用瀏覽器調(diào)試node.js了!!!下面這篇文章主要介紹了利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法步驟,文中介紹的很詳細,需要的朋友可以參考學習,下面來一起看看吧。
    2017-02-02
  • Node.js操作系統(tǒng)OS模塊用法分析

    Node.js操作系統(tǒng)OS模塊用法分析

    這篇文章主要介紹了Node.js操作系統(tǒng)OS模塊用法,結(jié)合實例形式分析了nodejs OS模塊常見函數(shù)功能及簡單使用技巧,需要的朋友可以參考下
    2019-01-01
  • node.js入門教程之querystring模塊的使用方法

    node.js入門教程之querystring模塊的使用方法

    querystring模塊主要用來解析查詢字符串,下面這篇文章主要介紹了關于node.js中querystring模塊使用方法的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 簡單了解小程序+node梳理登陸流程

    簡單了解小程序+node梳理登陸流程

    這篇文章主要介紹了簡單了解小程序+node梳理登陸流程,以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • Node?ORM項目中使用Sequelize實例詳解

    Node?ORM項目中使用Sequelize實例詳解

    這篇文章主要為大家介紹了Node?ORM項目中使用Sequelize實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • node.js自動上傳ftp的腳本分享

    node.js自動上傳ftp的腳本分享

    這篇文章主要給大家介紹了一個關于node.js自動上傳ftp腳本的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-06-06
  • 詳解node child_process模塊學習筆記

    詳解node child_process模塊學習筆記

    這篇文章主要介紹了詳解node child_process模塊學習筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 使用NodeJS?5分鐘?連接?Redis?讀寫操作的詳細過程

    使用NodeJS?5分鐘?連接?Redis?讀寫操作的詳細過程

    這篇文章主要介紹了NodeJS?5分鐘?連接?Redis?讀寫操作,本文給大家介紹的非常詳細,對大家學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 簡述pm2常用命令集合及配置文件說明

    簡述pm2常用命令集合及配置文件說明

    這篇文章主要介紹了簡述pm2常用命令集合及配置文件說明,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • node里的filesystem模塊文件讀寫操作詳解

    node里的filesystem模塊文件讀寫操作詳解

    這篇文章主要為大家介紹了node里的filesystem模塊文件讀寫操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論

浦东新区| 长武县| 民县| 宣恩县| 高清| 双辽市| 东港市| 密山市| 昔阳县| 通江县| 宝坻区| 克拉玛依市| 肃宁县| 团风县| 汽车| 麻江县| 阿拉善左旗| 兴山县| 东方市| 深圳市| 浮梁县| 北辰区| 叶城县| 文化| 确山县| 日照市| 长岭县| 湾仔区| 宿松县| 澳门| 仁布县| 额敏县| 诸暨市| 绥中县| 岑溪市| 延寿县| 崇左市| 凤凰县| 鹿泉市| 宣恩县| 清原|