国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

node刪除、復(fù)制文件或文件夾示例代碼

2019-11-19 11:02:50
字體:
供稿:網(wǎng)友

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

首先引入相關(guān)包(會(huì)在使用處具體說明):

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

對(duì)文件的操作

復(fù)制文件

這里列出三種方式:

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

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

/** * @param { copiedPath: String } (被復(fù)制文件的地址,相對(duì)地址) * @param { resultPath: String } (放置復(fù)制文件的地址,相對(duì)地址) */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 方法,實(shí)現(xiàn)代碼如下

/** * @param { delPath:String } (需要?jiǎng)h除文件的地址) * @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); }}

對(duì)文件夾(目錄)的操作

以下代碼有引用,復(fù)制文件相關(guān)方法

復(fù)制文件夾

使用了兩種方式:

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

實(shí)現(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 方式一:利用子進(jìn)程操作命令行方式     */    // 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);  }}

刪除文件夾

遞歸文件和文件夾,逐個(gè)刪除

實(shí)現(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í)行相應(yīng)的方法

/** * @des 獲取命令行傳遞的參數(shù) */const type = process.argv[2]function execute() {  /**   * @des 請(qǐng)根據(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 實(shí)現(xiàn)

這是對(duì)fs相關(guān)方法的封裝,使用更簡(jiǎn)單快捷

/** * @des fs-extra 包實(shí)現(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é)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东莞市| 乌拉特前旗| 阿拉善左旗| 晋城| 蚌埠市| 宁夏| 罗定市| 通河县| 青浦区| 武乡县| 青川县| 乳山市| 崇礼县| 红河县| 铜鼓县| 措美县| 长宁区| 江口县| 丹东市| 灌阳县| 藁城市| 淳安县| 小金县| 临汾市| 吉安县| 余庆县| 永福县| 舟山市| 麻江县| 安阳市| 新津县| 双柏县| 京山县| 莱西市| 萝北县| 阿瓦提县| 巍山| 昌乐县| 庄浪县| 泰安市| 沙河市|