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 相关文章推荐
JQUERY 浏览器判断实现函数
Aug 20 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
js事件处理程序跨浏览器解决方案
Mar 27 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
解决JavaScript中0.1+0.2不等于0.3问题
Oct 23 Javascript
详解vue beforeEach 死循环问题解决方法
Feb 25 Javascript
vue 插槽简介及使用示例
Nov 19 Vue.js
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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
完美解决AJAX跨域问题
2013/11/01 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
简单了解python中对象的取反运算符
2019/07/01 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
农行实习自我鉴定
2013/09/22 职场文书
九年级体育教学反思
2014/01/23 职场文书
运动会致辞稿50字
2014/02/04 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
工作自我评价范文
2019/03/21 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
Django+Celery实现定时任务的示例
2021/06/23 Python
MySQL 开窗函数
2022/02/15 MySQL