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