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


Posted in Javascript onMarch 12, 2018

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

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

Javascript 相关文章推荐
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
详解 vue.js用法和特性
Oct 15 Javascript
Angular中使用MathJax遇到的一些问题
Dec 15 Javascript
angularjs select 赋值 ng-options配置方法
Feb 28 Javascript
mpvue构建小程序的方法(步骤+地址)
May 22 Javascript
JavaScript 异步时序问题
Nov 20 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 #Javascript
js中document.write和document.writeln的区别
Mar 11 #Javascript
Javascript 编码约定(编码规范)
Mar 11 #Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 #Javascript
js经验分享 JavaScript反调试技巧
Mar 10 #Javascript
webpack打包node.js后端项目的方法
Mar 10 #Javascript
webpack external模块的具体使用
Mar 10 #Javascript
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
使用Javascript简单计算器
2018/11/17 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python操作redis数据库的三种方法
2020/09/10 Python
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
小学生打架检讨书
2014/01/26 职场文书
小学教师寄语大全
2014/04/03 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
学习十八大标语
2014/10/09 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
律师催款函范文
2015/06/24 职场文书
入队仪式主持词
2015/07/04 职场文书
大学副班长竞选稿
2015/11/21 职场文书