在Javascript中获取文件夹和文件列表的最佳方式

我正在使用node-webkit,并试图让用户select一个文件夹,然后我将返回该文件夹的目录结构并recursion获取其子项。

我已经很简单的使用这个代码(在一个Angular Controller中)。

 var fs = require('fs');

     $ scope.explorer = [];
     $ scope.openFile = function(){
             $ scope.explorer = [tree_entry($ scope.path)];    
             get_folder($ scope.path,$ scope.explorer [0] .children);
     };

    函数get_folder(path,树){
         fs.readdir(path,function(err,files){
             (err)return console.log(err);

             files.forEach(function(file,idx){
                 tree.push(tree_entry(文件));
                 fs.lstat(path+ '/' +文件,function(ERR,统计数据){
                     (err)return console.log(err);
                    如果(stats.isDirectory()){
                         get_folder(path+ '/' +文件,树[IDX]。儿童);
                     }
                 });
             });
         });
        的console.log($ scope.explorer);

        返回;
     }

    函数tree_entry(entry){
         return {label:entry,children:[]}
     }

以一个中等大小的文件夹与22个子文件夹和大约4级深,需要几分钟来获得整个目录结构。

有什么我明显做错了吗? 我不敢相信这需要很长时间,因为我正在使用内置的Node fs方法。 还是有办法获取目录的全部内容,而不触及每个文件?

我希望能够在文件名称上使用Angularfilter,也可以在内容上使用Angularfilter,所以延迟处理整个树不太可能是一个可行的解决scheme。

在我的项目中,我使用这个function来获取大量的文件。 这很快(把require("FS") ,使其更快):

 var _getAllFilesFromFolder = function(dir) { var filesystem = require("fs"); var results = []; filesystem.readdirSync(dir).forEach(function(file) { file = dir+'/'+file; var stat = filesystem.statSync(file); if (stat && stat.isDirectory()) { results = results.concat(_getAllFilesFromFolder(file)) } else results.push(file); }); return results; }; 

用法很明确:

 _getAllFilesFromFolder(__dirname + "folder");