node复制文件夹,文件夹里含有的文件夹及子文件太多,出现Error: EMFILE: too many open files,求问大神怎么解决?
发布于 5 年前 作者 yuquanH 2963 次浏览 来自 问答

node复制文件夹,文件夹里含有的文件夹及子文件太多,出现Error: EMFILE: too many open files 以下为代码: var fs=require(‘fs’); var stat=fs.stat; var readable; var writable; var copy=function(src,dst){ //读取目录 fs.readdir(src,function(err,paths){ // console.log(paths) if(err){ throw err; } paths.forEach(function(path){ var _src=src+’/’+path; var _dst=dst+’/’+path; stat(_src,function(err,st){ if(err){ throw err; } if(st.isFile()){ readable=fs.createReadStream(_src);//创建读取流 writable=fs.createWriteStream(_dst);//创建写入流 readable.pipe(writable); }else if(st.isDirectory()){ exists(_src,_dst,copy); } }); }); }); }

var exists=function(src,dst,callback){ //测试某个路径下文件是否存在 fs.exists(dst,function(exists){ if(exists){//不存在 callback(src,dst); }else{//存在 fs.mkdir(dst,function(){//创建目录 callback(src,dst) }) } }) if(!writable)return; writable.on(‘end’,() => { console.log(‘完成复制’) }) }

let fromSrc = '…/fromDir’ let toSrc = ../toDir exists(fromSrc,toSrc,copy);

1 回复

因为你是并行全部写的。。。同时间打开太多了。 你对 callback 和 await/async 那块的理解可能需要学习下。

找个现成的库即可。 https://npms.io/search?q=copy+file

回到顶部