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系列(4) 立即调用的函数表达式
Jan 15 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
Javascript无参数和有参数类继承问题解决方法
Mar 02 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
使用 php4 加速 web 传输
2006/10/09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
javascript操作数组详解
2014/12/17 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
python对数组进行反转的方法
2015/05/20 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
学习交流会主持词
2014/04/01 职场文书
生日宴会策划方案
2014/06/03 职场文书
数学教育专业求职信
2014/07/22 职场文书
妇女工作先进事迹
2014/08/17 职场文书
个人自查自纠材料
2014/10/14 职场文书