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 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
js对象数组按属性快速排序
Jan 31 Javascript
js Array操作的最简短最容易理解方法
Dec 09 Javascript
JavaScript—window对象使用示例
Dec 09 Javascript
JS OffsetParent属性深入解析
Jan 13 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 Javascript
js实现微信聊天界面
Aug 09 Javascript
解决iView Table组件宽度只变大不变小的问题
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
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php发送邮件的问题详解
2015/06/22 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
js实现选项卡效果
2020/03/07 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python实现串口自动触发工作的示例
2019/07/02 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
团队拓展活动方案
2014/08/28 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
遗失说明具结保证书
2015/02/26 职场文书
个人年终总结开头
2015/03/06 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python