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 相关文章推荐
奇妙的js
Sep 24 Javascript
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
javascript学习之闭包分析
Dec 02 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
vue项目部署到Apache服务器中遇到的问题解决
Aug 24 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连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中删除文件的程序代码
2011/03/13 Python
python列表去重的二种方法
2014/02/14 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python函数式编程
2017/07/20 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
python将回车作为输入内容的实例
2018/06/23 Python
Python中如何导入类示例详解
2019/04/17 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
遥感技术与仪器求职信
2014/02/22 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书