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

首頁 > 語言 > JavaScript > 正文

node中實(shí)現(xiàn)刪除目錄的幾種方法

2024-05-06 15:37:35
字體:
供稿:網(wǎng)友

由于刪除目錄只能刪除空目錄(如果有子文件或文件夾要先刪除)

目錄結(jié)構(gòu)算是典型的二叉樹模型,所以涉及到遍歷樹結(jié)構(gòu)

二叉樹遍歷(分為深度和廣度,以及先序,中序,后序之分)

以下以深度先序解決目錄刪除

在node中由于主線程為單線程, 可以采取串行方式和并行方式

無論用什么方法刪除,就一點(diǎn)核心: 如果是文件直接刪除, 如果不是就刪除所有子文件或子目錄, 然后記得(一定記得刪除自己)

深度先序(串行)

深度先序(串行 回調(diào)方式)

const fs = require('fs')const path = require('path')function rmdir(filePath, callback) {  // 先判斷當(dāng)前filePath的類型(文件還是文件夾,如果是文件直接刪除, 如果是文件夾, 去取當(dāng)前文件夾下的內(nèi)容, 拿到每一個(gè)遞歸)  fs.stat(filePath, function(err, stat) {    if(err) return console.log(err)    if(stat.isFile()) {      fs.unlink(filePath, callback)    }else {      fs.readdir(filePath, function(err, data) {        if(err) return console.log(err)        let dirs = data.map(dir => path.join(filePath, dir))        let index = 0        !(function next() {          // 此處遞歸刪除掉所有子文件 后刪除當(dāng)前 文件夾          if(index === dirs.length) {            fs.rmdir(filePath, callback)          }else {            rmdir(dirs[index++],next)          }        })()      })    }  })}rmdir('a', function() {  console.log('刪除成功')})

深度先序 (串行 promise寫法)

const fs = require('fs')const path = require('path')function rmdirPromise(filePath) {  return new Promise((resolve, reject) => {    fs.stat(filePath, function(err, stat) {      if(err) reject(err)      if(stat.isFile()) {        fs.unlink(filePath, function(err) {          if(err) reject(err)          resolve()        })      }else {        fs.readdir(filePath, function(err, dirs) {          if(err) reject(err)          dirs = dirs.map(dir => path.join(filePath, dir)) // a/b a/c          let index = 0;          (function next() {            if(index === dirs.length) {              fs.rmdir(filePath, function(err) {                if(err) reject(err)                resolve()              })            }else {              rmdirPromise(dirs[index++]).then(() => {                next()              }, err => {                reject(err)              })            }          })()        })      }    })  })}rmdirPromise('a').then(() => {  console.log('刪除成功')})

深度先序 (串行 async await寫法)

// 在node v10.0.0+版本中fs模塊提供 promise 寫法 const fs = require('fs').promises// 如果在node 10之前的版本中可以引入第三方模塊 mz const fs = require('mz/fs') 用法一致 https://www.npmjs.com/package/mzconst fs = require('fs').promisesconst path = require('path')async function rmdirAsync(filePath) {  let stat = await fs.stat(filePath)  if (stat.isFile()) {    await fs.unlink(filePath)  } else {    let dirs = await fs.readdir(filePath)    dirs = dirs.map(dir => path.join(filePath, dir))    let index = 0;    (async function next() {      if (index === dirs.length) {        await fs.rmdir(filePath)      } else {        await rmdirAsync(dirs[index++])        await next()      }    })()  }}rmdirAsync('a').then(() => {  console.log('刪除成功')}, (err) => {  console.log('err', err)})            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 宜阳县| 三亚市| 普兰店市| 宁国市| 宣威市| 定襄县| 托克托县| 兰州市| 湾仔区| 华安县| 祥云县| 库尔勒市| 德惠市| 民权县| 寻乌县| 青田县| 红桥区| 江华| 嘉义县| 勐海县| 上饶县| 静乐县| 三穗县| 肥西县| 玛纳斯县| 公安县| 乌苏市| 兰西县| 太和县| 苍梧县| 深水埗区| 新和县| 镇沅| 福建省| 游戏| 蓝山县| 杭锦后旗| 习水县| 台南市| 嫩江县| 武汉市|