欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Node.JS循环删除非空文件夹及子目录下的所有文件

程序员文章站 2022-04-21 08:41:45
最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度。所以就自己写了一个。 var fs =...

最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度。所以就自己写了一个。

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 complete

ps:下面看下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循环删除非空文件夹及子目录下的所有文件,希望对大家有所帮助