Я использую 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 в именах файлов, вплоть до дерева, и, возможно, от содержимого, поэтому отсрочка обработки всего дерева вряд ли будет решением, которое должно сработать.