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 相关文章推荐
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
javascript下IE与FF兼容函数收集
Sep 17 Javascript
FireFox JavaScript全局Event对象
Jun 14 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
Nov 09 Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 Javascript
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
JS中this的4种绑定规则详解
Feb 04 Javascript
js实现滚动条自动滚动
Dec 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
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
javascript的事件描述
2006/09/08 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
node.js基础知识汇总
2020/08/25 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python引用DLL文件的方法
2015/05/11 Python
python三大神器之fabric使用教程
2019/06/10 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Django操作session 的方法
2020/03/09 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
安全生产目标责任书
2014/04/14 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电