gpt4 book ai didi

javascript - 在Javascript中获取文件夹和文件列表的最佳方法

转载 作者:IT老高 更新时间:2023-10-28 22:05:24 28 4
gpt4 key购买 nike

我正在使用 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 过滤器,并且可能也对内容使用,因此延迟处理整个树不太可能是可行的解决方案.

最佳答案

在我的项目中,我使用此功能来获取大量文件。它非常快(放出 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 - 在Javascript中获取文件夹和文件列表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20822273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com