• Lunes 18 de Noviembre de 2024, 01:37

Autor Tema:  Listar archivos en directorio por bloques  (Leído 3173 veces)

Faust

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Listar archivos en directorio por bloques
« en: Miércoles 5 de Enero de 2011, 22:47 »
0
Saludos

Mi duda es sobre como listar archivos por bloques, es decir, si tengo un directorio con miles de archivos con que función puedo leer los primeros 50 únicamente.

He probado con Getfiles, pero te devuelve todos de un solo golpe y si tengo por ejemplo una carpeta compartida en otro equipo en red y tiene más de 5000 tarda muchísimo en devolver el listado, antes con delphi utilizaba un ciclo con FindFirst, FindNext y FindClose y podía terminar el ciclo cuando haya leído un número determinado de archivos, pero en C# no sé como hacerlo.

Por su ayuda muchas gracias.

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Listar archivos en directorio por bloques
« Respuesta #1 en: Viernes 7 de Enero de 2011, 00:37 »
0
mmmm la verdad tampoco encontré nada, pero creo que se podría hacer con Ienumerable o algo por el estilo, pero sinceramente son cosas que todavia me superan. Mi nivel es bajo.
No lo probado con muchos archivos, mira a ver si consume mucho. Aun que el problema que le veo, y es gordo, es listar los siguientes archivos.

Código: C#
  1.  
  2. DirectoryInfo a = new DirectoryInfo(@"ruta");
  3.             int n = 0;
  4.                 foreach (FileInfo b in a.GetFiles())
  5.                 {
  6.                     if (n < 3) // el tres es para obtener 3 resultados. 0, 1 y 2 de la matriz a.GetFiles()
  7.                     {
  8.                         MessageBox.Show(b.Name);
  9.                         n++;
  10.                     }
  11.                     else
  12.                         break;
  13.                 }
  14.  
  15.  

suerte!
Bueno, si te sirve, supongo que seria bueno ponerlo en un backgrounworker y por ejemplo si son 50 archivos que mostrar, en cada pasada dentro del if sumarle a la barra de progreso un 2%, no sé son ideas. Si usas esto y tienes problemas para manejarlo, aquí estamos.

Saludos.

Faust

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Listar archivos en directorio por bloques
« Respuesta #2 en: Viernes 7 de Enero de 2011, 00:52 »
0
Sale amigo, muchas gracias, lo pruebo mañana pues ya voy de salida también estuve viendo algunos artículos de msdn, pero como sigo verde en esto de C# pues no le he entendido muy bien. Mañana les cuento  ;)

LapizTolita

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Listar archivos en directorio por bloques
« Respuesta #3 en: Viernes 7 de Enero de 2011, 10:56 »
0
Solo para .NET Framework 4
Los métodos GetDirectories y EnumerateDirectories difieren como sigue: Al utilizar EnumerateDirectories, puede empezar a enumerar la colección de los objetos DirectoryInfo antes de que se devuelva la colección entera; al utilizar GetDirectories, debe esperar a que la matriz entera de objetos DirectoryInfo se devuelva antes de poder tener acceso a la matriz. Por consiguiente, cuando está trabajando con muchos archivos y directorios, EnumerateDirectories puede ser más eficaz.
Código: C#
  1. DirectoryInfo root = new DirectoryInfo(@"c:");
  2.  
  3. int i = 0;
  4.  
  5. foreach (var item in root.EnumerateDirectories("*"))
  6. {
  7.     if (i < 50)
  8.         Console.WriteLine(item);
  9.     else
  10.         break;
  11.     i++;
  12. }
  13. Console.ReadKey();
  14.  
Recuerda que por defecto son los primeros 50 en orden alfabético.

Faust

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Listar archivos en directorio por bloques
« Respuesta #4 en: Viernes 7 de Enero de 2011, 16:25 »
0
Esta última opción de LapizTolita parece ser lo que estaba buscando, muchas gracias por su apoyo, ya que soy novato en C#, aunque es muy diferente a Delphi, en el que aunque no soy experto tengo mucha experiencia.

Gracias de nuevo  :good: , estas van por mi cuenta  :beer: