【发布时间】:2014-01-16 07:40:00
【问题描述】:
我正在使用 node-webkit,并试图让用户选择一个文件夹,然后我将返回该文件夹的目录结构并递归获取其子级。
我用这段代码(在 Angular 控制器中)相当简单地完成了这个工作。
var fs = require('fs');
$scope.explorer=[];
$scope.openFile = function(){
$scope.explorer = [tree_entry($scope.path)];
get_folder($scope.path, $scope.explorer[0].children);
};
function get_folder(path, tree){
fs.readdir(path, function(err,files){
if (err) return console.log(err);
files.forEach( function (file,idx){
tree.push(tree_entry(file));
fs.lstat(path+'/'+file,function(err,stats){
if(err) return console.log(err);
if(stats.isDirectory()){
get_folder(path+'/'+file,tree[idx].children);
}
});
});
});
console.log($scope.explorer);
return;
}
function tree_entry(entry){
return { label : entry, children: []}
}
取一个包含 22 个子文件夹和大约 4 层深度的中等大小的文件夹,需要几分钟才能获得整个目录结构。
我在这里显然做错了什么吗?我不敢相信它需要这么长时间,因为我正在使用内置的 Node fs 方法。或者有没有办法在不触及每个文件的情况下获取目录的全部内容?
我希望能够对文件名一直使用 Angular 过滤器,并且可能也对内容使用,因此延迟处理整个树不太可能是可行的解决方案.
【问题讨论】:
-
也许它正在获取 .. 作为一个文件。您可能应该放置一些 console.log 以了解更多关于正在发生的事情。
-
你的意思是它正在打开每个文件?不,这似乎不是问题,我正要删除问题,结果如果我删除了 console.log 并放入一个输出到控制台一次的回调,事情发生得更快。
-
我的意思是..,父目录,但那是一个远景。很好,你找到了解决方案
-
你需要的是一个简单的遍历目录的递归遍历函数。 Google 是您的朋友。
标签: javascript node.js recursion filesystems