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