首页 > 开发 > JS > 正文

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

2024-05-06 16:43:00
字体:
来源:转载
供稿:网友

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

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循环删除非空文件夹及子目录下的所有文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VeVb武林网网站的支持!


注:相关教程知识阅读请移步到JavaScript/Ajax教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表