Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: patilanz en 9 Diciembre 2017, 21:06 pm



Título: nodejs | obtener lista de archivos y directorios
Publicado por: patilanz en 9 Diciembre 2017, 21:06 pm
Buenas,
con este codigo intento obtener un array con el formato: [name: 'nombre', type: 'dir o file',...]
Código
  1. function getFilesInFolder(realPath, callback){
  2. fs.readdir(realPath, (err, files) => {
  3. if(err)return callback(0);
  4. if(!files.length)return callback([]);
  5. var r = [];
  6. for(var i =0;i<files.length;i++){
  7. var f = files[i];
  8. fs.stat(realPath + '/' + f, (err, stat) => {
  9. if(err)return r.push(0);
  10. var a = {name: f}; // Problema, la variable f cambia hasta el ultimo archivo
  11. if(stat.isFile())a.type = 'file';
  12. else if(stat.isDirectory())a.type = 'dir';
  13. r.push(a);
  14. if(r.length == files.length){
  15. r.filter((e) => {return e;})
  16. console.log('final R: ', r);
  17. callback(r);
  18. }
  19. });
  20. }
  21. });
  22. }

Tiene que ser asincrono. Entiendo el problema pero no se como solucionarlo.

Un saludo


Título: Re: nodejs | obtener lista de archivos y directorios
Publicado por: patilanz en 9 Diciembre 2017, 21:22 pm
Lo resolví:
Código
  1. var fs = require('fs');
  2. var path = require('path');
  3.  
  4. var dir = '../first';
  5. fs.readdir(dir, (err, files) => {
  6. var r = [];
  7. files.forEach((file) => {
  8. s(file);
  9. function s(file){
  10. fs.stat(dir + '/' + file, (err, stat) => {
  11. if(err){console.error(err);return;}
  12. if(stat.isDirectory())r.push({f:file, type: 'dir'});
  13. else if(stat.isFile())r.push({f:file, type: 'file'});
  14. else r.push(0);
  15. if(r.length == files.length){
  16. r.filter((m) => {return m;});
  17. console.log(r);
  18. }
  19. });
  20. }
  21. });
  22. });

Pero no creo que sea la mejor forma de hacerlo