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 相关文章推荐
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
Node.js静态文件服务器改进版
Jan 10 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
php 不使用js实现页面跳转
2014/02/11 PHP
Yii框架安装简明教程
2020/05/15 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
js中的this关键字详解
2013/09/25 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
Python中zfill()方法的使用教程
2015/05/20 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
Python语言描述最大连续子序列和
2017/12/05 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python处理PDF与CDF实例
2020/02/26 Python
Python实现对adb命令封装
2020/03/06 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
工商管理专业学生的自我评价
2013/10/01 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
高中政治教师教学反思
2016/02/23 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
Python字符串的转义字符
2022/04/07 Python
Python读取和写入Excel数据
2022/04/20 Python