如何关闭使用fs.readFile/writeFile打开的文件描述符



我的旧代码版本0.12.7工作得很好.

然而,它给EMFILE打开的文件太多了错误频繁。

如何释放使用

打开的文件描述符
require("fs").readFile(resobj.name, 'utf8', function (err, data)
{

});

您很可能需要批量读取这些文件,像这样:

const fs = require('fs/promises');
const files = [...<array of millions of file paths>];
const MAX_FILES_TO_PROCESS = 1000;
let promises;
let contents;
// Process 1000 files at a time
(async () => {
for (let a = 0; a < files.length; a += MAX_FILES_TO_PROCESS) {
promises = (files.slice(a, MAX_FILES_TO_PROCESS)).map(path => fs.readFile(path));
contents = await Promise.all(promises);
//Process the contents, then continue on the next loop
}
})();

两个可能对你有帮助的观察:

  1. 使用createReadStream而不是readFile,因为后者将整个文件读取到内存中。如果你要处理成千上万的对象,这是不可伸缩的。

  2. readFile不返回描述符,因为它会自动关闭文件。

最新更新