我需要打開一個包含文件的目錄..爲每個文件打開readstream並將所有文件中的數據寫入單個文件。但我不斷收到錯誤:EMFILE,打開'塊/ piece96.data'Nodejs錯誤:EMFILE
我的ulimit是256,我增加到1024.
我的代碼如下
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');
我怎樣才能防止EMI文件錯誤。由於我正在使用readdirSync並且不是一次打開所有文件,因此我一次不打開多個文件。我需要一種方法來讀取所有文件並寫入單個文件。
你.forEach爲每個文件創建一個功能在你的目錄中。您對每個文件至少使用2個文件句柄,以及下面使用的任何節點。無論如何,有了這麼多的文件,你可能想要限制你的並發動作,使用'async' ... – Joe
我改變了寫入流同步。這解決了它。 –
@GokulKav你拯救了我的一天。謝謝! – shaosh