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调用activeX获取u盘序列号的代码
Nov 21 Javascript
jQuery制作简洁的图片轮播效果
Apr 03 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
微信小程序封装http访问网络库实例代码
May 24 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 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
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
php xhprof使用实例详解
2019/04/15 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
Javascript函数的参数
2015/07/16 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
Python中使用动态变量名的方法
2014/05/06 Python
python实现人脸识别代码
2017/11/08 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
简单了解Python生成器是什么
2019/07/02 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
高中的职业生涯规划书
2013/12/28 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
服务行业演讲稿
2014/09/02 职场文书
运动会报道稿300字
2014/10/02 职场文书
淮海战役观后感
2015/06/11 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
python实现网络五子棋
2021/04/11 Python
Python中requests做接口测试的方法
2021/05/30 Python
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis