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

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

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循环删除非空文件夹及子目录下的所有文件 的全部内容, 来源链接: utcz.com/z/336757.html

回到顶部