gpt4 book ai didi

javascript - Node 错误 : EMFILE

转载 作者:搜寻专家 更新时间:2023-10-31 23:49:27 28 4
gpt4 key购买 nike

我需要打开一个包含文件的目录.. 为每个文件打开读取流并将所有文件中的数据写入一个文件中。但我一直收到错误:EMFILE,打开 'chunks/piece96.data'

我的 ulimit 是 256,我将它增加到 1024。目录中有 127 个文件可以打开、读取和写入单个文件。

我的代码如下



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 而不是一次打开所有文件。我需要一种方法来读取所有文件并写入单个文件。

最佳答案

我刚刚自己写了一小段代码来解决这个问题,我没有使用流,但这应该可以适应您的需求:

// Queuing reads and writes, so your nodejs script doesn't overwhelm system limits catastrophically
global.maxFilesInFlight = 100; // Set this value to some number safeish for your system
var origRead = fs.readFile;
var origWrite = fs.writeFile;

var activeCount = 0;
var pending = [];

var wrapCallback = function(cb){
return function(){
activeCount--;
cb.apply(this,Array.prototype.slice.call(arguments));
if (activeCount < global.maxFilesInFlight && pending.length){
console.log("Processing Pending read/write");
pending.shift()();
}
};
};
fs.readFile = function(){
var args = Array.prototype.slice.call(arguments);
if (activeCount < global.maxFilesInFlight){
if (args[1] instanceof Function){
args[1] = wrapCallback(args[1]);
} else if (args[2] instanceof Function) {
args[2] = wrapCallback(args[2]);
}
activeCount++;
origRead.apply(fs,args);
} else {
console.log("Delaying read:",args[0]);
pending.push(function(){
fs.readFile.apply(fs,args);
});
}
};

fs.writeFile = function(){
var args = Array.prototype.slice.call(arguments);
if (activeCount < global.maxFilesInFlight){
if (args[1] instanceof Function){
args[1] = wrapCallback(args[1]);
} else if (args[2] instanceof Function) {
args[2] = wrapCallback(args[2]);
}
activeCount++;
origWrite.apply(fs,args);
} else {
console.log("Delaying write:",args[0]);
pending.push(function(){
fs.writeFile.apply(fs,args);
});
}
};

关于javascript - Node 错误 : EMFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192660/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com