纯异步nodejs文件夹(目录)复制功能
node.js复制文件夹
思路:
1、callback驱动
2、递归所有需要复制文件
3、在一定阀值下并发复制文件
varasync=require("async"); varfs=require("fs"); varpath=require("path"); //cursivelymakedir functionmkdirs(p,mode,f,made){ if(typeofmode==='function'||mode===undefined){ f=mode; mode=0777&(~process.umask()); } if(!made) made=null; varcb=f||function(){}; if(typeofmode==='string') mode=parseInt(mode,8); p=path.resolve(p); fs.mkdir(p,mode,function(er){ if(!er){ made=made||p; returncb(null,made); } switch(er.code){ case'ENOENT': mkdirs(path.dirname(p),mode,function(er,made){ if(er){ cb(er,made); }else{ mkdirs(p,mode,cb,made); } }); break; //Inthecaseofanyothererror,justseeifthere'sadir //therealready.Ifso,thenhooray!Ifnot,thensomething //isborked. default: fs.stat(p,function(er2,stat){ //ifthestatfails,thenthat'ssuperweird. //lettheoriginalerrorbethefailurereason. if(er2||!stat.isDirectory()){ cb(er,made); }else{ cb(null,made) }; }); break; } }); } //singlefilecopy functioncopyFile(file,toDir,cb){ async.waterfall([ function(callback){ fs.exists(toDir,function(exists){ if(exists){ callback(null,false); }else{ callback(null,true); } }); },function(need,callback){ if(need){ mkdirs(path.dirname(toDir),callback); }else{ callback(null,true); } },function(p,callback){ varreads=fs.createReadStream(file); varwrites=fs.createWriteStream(path.join(path.dirname(toDir),path.basename(file))); reads.pipe(writes); //don'tforgetclosethewhenallthedataareread reads.on("end",function(){ writes.end(); callback(null); }); reads.on("error",function(err){ console.log("erroroccurinreads"); callback(true,err); }); } ],cb); } //cursivelycountthefilesthatneedtobecopied function_ccoutTask(from,to,cbw){ async.waterfall([ function(callback){ fs.stat(from,callback); }, function(stats,callback){ if(stats.isFile()){ cbw.addFile(from,to); callback(null,[]); }elseif(stats.isDirectory()){ fs.readdir(from,callback); } }, function(files,callback){ if(files.length){ for(vari=0;i总结
以上所述是小编给大家介绍的纯异步nodejs文件夹(目录)复制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!