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 相关文章推荐
页面中iframe相互传值传参
Dec 13 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
jQuery 获取浏览器所在的IP地址的小例子
Nov 08 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
JS功能代码集锦
May 04 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
vue elementui form表单验证的实现
Nov 11 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
vue-cli 关闭热更新操作
Sep 18 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
实例介绍Python中整型
2019/02/11 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python selenium firefox使用详解
2019/02/26 Python
python实现矩阵打印
2019/03/02 Python
Python Process多进程实现过程
2019/10/22 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
别名指示符是什么
2012/10/08 面试题
书法培训心得体会
2014/01/05 职场文书
审计主管岗位职责
2014/01/31 职场文书
低碳生活倡议书
2014/04/14 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers