关于使用fs.readdir进行异步目录搜索的任何想法?我意识到我们可以引入递归并使用下一个目录来调用read目录函数以进行读取,但是我有点担心它不会异步...
有任何想法吗?我看过很棒的node-walk,但不像readdir那样仅给我数组中的文件。虽然
寻找像...的输出
['file1.txt', 'file2.txt', 'dir/file3.txt']
关于使用fs.readdir进行异步目录搜索的任何想法?我意识到我们可以引入递归并使用下一个目录来调用read目录函数以进行读取,但是我有点担心它不会异步...
有任何想法吗?我看过很棒的node-walk,但不像readdir那样仅给我数组中的文件。虽然
寻找像...的输出
['file1.txt', 'file2.txt', 'dir/file3.txt']
该递归READDIR模块具有此功能。
klaw和klaw-sync对于这种事情值得考虑。这些是node-fs-extra的一部分。
我喜欢的答案,从chjj以上,并且不会已经能够没有这种开始创建我的版本并行循环的。
var fs = require("fs");
var tree = function(dir, done) {
var results = {
"path": dir
,"children": []
};
fs.readdir(dir, function(err, list) {
if (err) { return done(err); }
var pending = list.length;
if (!pending) { return done(null, results); }
list.forEach(function(file) {
fs.stat(dir + '/' + file, function(err, stat) {
if (stat && stat.isDirectory()) {
tree(dir + '/' + file, function(err, res) {
results.children.push(res);
if (!--pending){ done(null, results); }
});
} else {
results.children.push({"path": dir + "/" + file});
if (!--pending) { done(null, results); }
}
});
});
});
};
module.exports = tree;
我也创建了一个Gist。欢迎发表评论。我仍是从NodeJS领域开始的,所以这是我希望学习更多的一种方法。
如果您想使用npm套件,扳手非常好。
var wrench = require("wrench");
var files = wrench.readdirSyncRecursive("directory");
wrench.readdirRecursive("directory", function (error, files) {
// live your dreams
});
编辑(2018):
最近阅读过的任何人:作者于2015年弃用了此软件包:
不推荐使用扳手.js,并且已经有一段时间没有更新了。我强烈建议使用fs-extra进行任何额外的文件系统操作。
万一有人发现它有用,我还整理了一个同步版本。
var walk = function(dir) {
var results = [];
var list = fs.readdirSync(dir);
list.forEach(function(file) {
file = dir + '/' + file;
var stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
/* Recurse into a subdirectory */
results = results.concat(walk(file));
} else {
/* Is a file */
results.push(file);
}
});
return results;
}
提示:过滤时使用较少的资源。在此函数本身中进行过滤。例如,results.push(file);
用下面的代码替换。根据需要进行调整:
file_type = file.split(".").pop();
file_name = file.split(/(\\|\/)/g).pop();
if (file_type == "json") results.push(file);
这是一种获取所有文件(包括子目录)的递归方法。