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基础第一章 JavaScript与用户端
Jul 22 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
浅谈sass在vue注意的地方
Aug 10 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
vue项目打包部署到服务器的方法示例
Aug 27 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
Sep 27 Javascript
Vue infinite update loop的问题解决
Apr 23 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
JavaScript判断浏览器版本的方法
Nov 03 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
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
VUE实现吸底按钮
2021/03/04 Vue.js
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
web.py在模板中输出美元符号的方法
2014/08/26 Python
详解python运行三种方式
2019/05/13 Python
python解析xml简单示例
2019/06/21 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
40岁生日感言
2014/02/15 职场文书
美术指导求职信
2014/03/17 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
社区戒毒工作方案
2014/06/04 职场文书
人力资源管理求职信
2014/08/07 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
学生打架检讨书
2014/10/20 职场文书
社区元宵节活动总结
2015/02/06 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技