type - La mejor forma de obtener una lista de carpetas y archivos en Javascript
obtener ruta input file javascript (1)
En mi proyecto utilizo esta función para obtener una gran cantidad de archivos. Es bastante rápido (ponga require("FS")
para que sea aún más rápido):
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;
};
el uso es claro:
_getAllFilesFromFolder(__dirname + "folder");
Estoy usando node-webkit, y estoy tratando de que un usuario seleccione una carpeta, y devolveré la estructura de directorios de esa carpeta y recursivamente obtendré sus hijos.
Esto funciona bastante simple con este código (en un controlador 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: []} }
Tomando una carpeta de tamaño moderado con 22 carpetas secundarias y aproximadamente 4 niveles de profundidad, tomará unos minutos obtener toda la estructura del directorio.
¿Hay algo que obviamente estoy haciendo mal aquí? No puedo creer que tome tanto tiempo, ya que estoy usando los métodos integrados de Node fs. ¿O hay una manera de obtener todo el contenido de un directorio sin tocar todos y cada uno de los archivos?
Voy a querer poder utilizar un filtro angular en los nombres de los archivos en todo el árbol, y posiblemente también en los contenidos, por lo que no es probable que una solución que funcione tarde retrase el procesamiento del árbol completo.