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实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
改善用户体验的五款jQuery插件分享
May 22 Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
Nov 29 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
javascript中关于类型判断的一些疑惑小结
Oct 14 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
Jul 20 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
Dec 19 Javascript
如何管理Vue中的缓存页面
Feb 06 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
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
js的三种继承方式详解
2017/01/21 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Python向excel中写入数据的方法
2019/05/05 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python字典改变value值方法总结
2019/06/21 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python中的全局变量如何理解
2020/06/04 Python
python批量生成条形码的示例
2020/10/10 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
某公司Java工程师面试题笔试题
2016/03/27 面试题
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015年司法所工作总结
2015/04/27 职场文书
高一作文之暖冬
2019/11/09 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python