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 相关文章推荐
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
Jan 19 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
jquery自定义表格样式
Nov 23 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
基于gulp合并压缩Seajs模块的方式说明
Jun 14 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
基于slideout.js实现移动端侧边栏滑动特效
Nov 28 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 16 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 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
第八节 访问方式 [8]
2006/10/09 PHP
php基础知识:类与对象(5) static
2006/12/13 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
你真的了解Python的random模块吗?
2017/12/12 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
python实现简单坦克大战
2020/03/27 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
教师节班会主持词
2015/07/06 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
正则表达式基础与常用验证表达式
2022/06/16 Javascript