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 相关文章推荐
Bookmarklet实现启动jQuery(模仿 云输入法)
Sep 15 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
js日历功能对象
Jan 12 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
Sep 12 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
JS扩展类,克隆对象与混合类实例分析
Nov 26 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 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作的文本留言本的例子(三)
2006/10/09 PHP
做一个有下拉功能的留言版
2006/10/09 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python读写ini配置文件方法实例分析
2015/06/30 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
手把手教你python实现SVM算法
2017/12/27 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
学校运动会报道稿
2014/09/23 职场文书
实习指导老师意见
2015/06/04 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
加强党性修养心得体会
2016/01/21 职场文书