最近要實現一個循環文件夾的功能,文件夾可能不是空的,還可能帶有子文件夾和文件,網上找了一些現有的庫,但是都不提供刪除進度。所以就自己寫了一個。
var fs  = require('fs')var path = require('path')var remove = function(tarPath, cb, removeStates) { if (!removeStates) {  removeStates = { cur: 0, all: 0 } } else {  if (!removeStates.cur) {   removeStates.cur = 0;  }  if (!removeStates.all) {   removeStates.all = 0;  } } removeStates.all++; fs.stat(tarPath, function(err, states) {  removeStates.cur++;  if (err) {   cb && cb()   return  }  if (states.isDirectory()) {   fs.readdir(tarPath, function(err, files) {    if (err) {     console.log(err)     cb && cb()     return    }    if (files.length < 1) {     fs.rmdir(tarPath, cb)     return    }    var count  = 0    var checkEnd = function() {     if (++count == files.length) {      fs.rmdir(tarPath, cb)     }    }    files.forEach(function(file) {     remove(path.join(tarPath, file), checkEnd, removeStates)    })   })  } else {   fs.unlink(tarPath, function(err) {    if (err) {     console.log(err)    }    cb && cb()    return   })  } }) return removeStates}使用很簡單
var states = remove('./testdir', function() {  console.log('delete complete')  clearInterval(checkTimer)});var checkTimer = setInterval(function() {  console.log(states)}, 500);輸出結果:
node remove.js{ cur: 546, all: 546 }delete completePS:下面看下NodeJs遞歸刪除非空文件夾
此文由于第一次使用fs.unlink()刪除文件夾時報“Error: EPERM: operation not permitted, unlink”錯誤而寫,這是因為fs.unlink()只能刪除文件。
	fs.rmdir()或fs.rmdirSync()用戶刪除空文件夾, fs.unlink()或fs.unlinkSync()用于刪除文件,因此刪除非空文件夾需要使用遞歸方式。
function deleteFolderRecursive(path) {  if( fs.existsSync(path) ) {    fs.readdirSync(path).forEach(function(file) {      var curPath = path + "/" + file;      if(fs.statSync(curPath).isDirectory()) { // recurse        deleteFolderRecursive(curPath);      } else { // delete file        fs.unlinkSync(curPath);      }    });    fs.rmdirSync(path);  }};總結
以上所述是小編給大家介紹的Node.JS循環刪除非空文件夾及子目錄下的所有文件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
新聞熱點
疑難解答