Node.JS循环删除非空文件夹及子目录下的所有文件
最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度。所以就自己写了一个。
varfs=require('fs')
varpath=require('path')
varremove=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
}
varcount=0
varcheckEnd=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
})
}
})
returnremoveStates
}
使用很简单
varstates=remove('./testdir',function(){
console.log('deletecomplete')
clearInterval(checkTimer)
});
varcheckTimer=setInterval(function(){
console.log(states)
},500);
输出结果:
noderemove.js
{cur:546,all:546}
deletecomplete
PS:下面看下NodeJs递归删除非空文件夹
此文由于第一次使用fs.unlink()删除文件夹时报“Error:EPERM:operationnotpermitted,unlink”错误而写,这是因为fs.unlink()只能删除文件。
fs.rmdir()或fs.rmdirSync()用户删除空文件夹,fs.unlink()或fs.unlinkSync()用于删除文件,因此删除非空文件夹需要使用递归方式。
functiondeleteFolderRecursive(path){
if(fs.existsSync(path)){
fs.readdirSync(path).forEach(function(file){
varcurPath=path+"/"+file;
if(fs.statSync(curPath).isDirectory()){//recurse
deleteFolderRecursive(curPath);
}else{//deletefile
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
总结
以上所述是小编给大家介绍的Node.JS循环删除非空文件夹及子目录下的所有文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!