파일이 들어있는 디렉토리를 열어야합니다. 각각에 대해 readstream을 열고 모든 파일의 데이터를 단일 파일에 씁니다. 하지만 난 계속 오류 : EMFILE, 열 '청크/piece96.data'Nodejs 오류 : EMFILE
내 ulimit는 256이고 나는 그것을 1024로 증가 시켰습니다. 나는 하나의 파일을 열고, 읽고 쓸 수있는 127 개의 파일을 가지고 있습니다.
내 코드는 내가 EMI 파일 오류를 방지 할 수 있습니까
var DIR='chunks/';
var files=fs.readdirSync(DIR);
var filename='bach.mp3';
files.forEach(function(singlebit){
//console.log(files);
var bit=fs.createReadStream(DIR+singlebit);
var resultfile=fs.createWriteStream(filename,{
flags:'r+',
encoding:null,
mode:0666
});
bit.on('data',function(bitdata){
resultfile.write(bitdata);
console.log(bitdata);
}).on('end',function(){
resultfile.end();
});
});
console.log('file complete');
이하입니다. readdirSync를 사용하고 한 번에 모든 파일을 열지 않기 때문에 많은 파일을 한 번에 열지 않습니다. 모든 파일을 읽고 단일 파일에 쓰는 방법이 필요합니다.
귀하의 .forEach 각 파일에 대한 함수를 만듭니다 귀하의 디렉토리에. 각 파일에 대해 최소한 2 개의 파일 핸들을 사용하고 그 아래에 사용중인 노드를 사용합니다. 어쨌든, 그 많은 파일들과 함께, 당신은'async'와 같은 것을 사용하여 동시 행동을 제한하고 싶을지도 모릅니다. – Joe
write stream을 sync로 변경했습니다. 그것으로 해결되었습니다. –
@GokulKav 당신은 나의 하루를 저장합니다. 고맙습니다! – shaosh