在JavaScript中获取文件夹和文件列表的最佳方法

我正在使用node-webkit,并试图让用户选择一个文件夹,然后返回该文件夹的目录结构并递归获取其子级。

我已经用这个代码(在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);

};

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过滤器,也可能在内容上使用Angular过滤器,因此延迟处理整个树不可能是可行的解决方案。

回答:

在我的项目中,我使用此功能获取大量文件。这非常快(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");

以上是 在JavaScript中获取文件夹和文件列表的最佳方法 的全部内容, 来源链接: utcz.com/qa/434398.html

回到顶部