假设我有一个包含 100K+ 甚至 500k+ 文件的目录。我想用 fs.readdir
读取目录,但它是异步的,不是流式的。有人告诉我异步在完成读取整个文件列表之前使用内存。
那么解决方案是什么?我想用流方法读取 readdir。可以吗?
最佳答案
在现代计算机中,遍历一个包含 50 万个文件的目录没什么。当您在 Node.js 中异步 fs.readdir
时,它所做的只是读取指定目录中的文件名列表。它不读取文件的内容。我刚刚在目录中测试了 700K 个文件。加载这个文件名列表只需要 21MB 的内存。
一旦你加载了这个文件名列表,你只需一个一个地遍历它们,或者通过设置一些并发限制来并行遍历它们,你就可以轻松地使用它们。示例:
var async = require('async'),
fs = require('fs'),
path = require('path'),
parentDir = '/home/user';
async.waterfall([
function (cb) {
fs.readdir(parentDir, cb);
},
function (files, cb) {
// `files` is just an array of file names, not full path.
// Consume 10 files in parallel.
async.eachLimit(files, 10, function (filename, done) {
var filePath = path.join(parentDir, filename);
// Do with this files whatever you want.
// Then don't forget to call `done()`.
done();
}, cb);
}
], function (err) {
err && console.trace(err);
console.log('Done');
});
关于javascript - 如何在 node.js 中流式读取目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757293/