您的位置:首页 > Web前端 > Node.js

Node.JS循环删除非空文件夹及子目录下的所有文件

2018-03-12 08:34 756 查看

最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度。所以就自己写了一个。

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循环删除非空文件夹及子目录下的所有文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  node.js 循环 删除