sábado, 2 de julio de 2011

[WinForm] Listar Archivos del Directorio seleccionado

 

Introducción

En el presente artículo se implementa un ejemplo sencillo de como listar directorios con su contenido, incluyendo además el icono asociado a la extensión del archivo.

Algunas pruebas

Si bien durante las primeras pruebas se hizo uso de la funcionalidad

Icon.ExtractAssociatedIcon

para obtener la imagen relacionada con la extensión del archivo, note que no siempre se recuperaba el icono correcto, es por eso que investigando algo mas en detalle encontré que por medio de las api se puede realizar esto mismo.

La implementación de esta se puede hallar en el archivo ExtractIcon.cs

Si bien en el código solo he dejado una de estas alternativas

private void LoadFileList(string path)
        {
            string[] files = Directory.GetFiles(path);

            lvFiles.Items.Clear();

            foreach (var item in files)
            {
                string extension = Path.GetExtension(item);

                if (!imlSmall.Images.ContainsKey(extension))
                {
                    Icon iconSmall = FileExplorer.ExtractIconClass.GetIcon(item, true);
                    imlSmall.Images.Add(extension, iconSmall);
                    Icon iconLarge = FileExplorer.ExtractIconClass.GetIcon(item, false);
                    imlLarge.Images.Add(extension, iconLarge);
                }

                ListViewItem listviewItem = new ListViewItem(Path.GetFileName(item), extension);
                lvFiles.Items.Add(listviewItem);

            }
        }

podrían cambiarse las líneas 13 a 16 para hacer uso del

Icon.ExtractAssociatedIcon()

y comprobar por uno mismo la diferencia en el icono que se obtiene.

 

Ejemplo de código

Debo remarcar que la implementación que se encuentre en la clase ExtractIcon.cs, no es de mi autoría, sino que use de guía ejemplo como ser

Extracting Icons from Files

ExtractIconClass.cs

Building a Better ExtractAssociatedIcon

 

[C#]
[VB.NET]

8 comentarios:

  1. Hola una pregunta para mostrarlos en un list view ? tendras algun tutorial

    ResponderEliminar
  2. hola Fernando

    no entendi la pregunta

    para mostrar que cosa en el listview ?

    saludos

    ResponderEliminar
  3. hola.. disculpe pero porque algunos de los archivos de mi pc no los abre.. se traba y sale esto

    Acceso denegado a la ruta de acceso 'C:\Archivos de programa'. y que el foreach no tiene suficientes privilejios
    y eso___ dirs.GetDirectories subrayado en amarillo


    en la linea 73 me marca todo eso?? porfavor y gracias :D

    ResponderEliminar
  4. hola Karen

    la verdad es un error raro
    pero que sucede si mueves la solucion a una carpeta mas corta, o sea creas una carpeta de nombre:

    c:\desarrollo

    y pones alli dentro la solucion (y todos los proyecto)
    creo que podria estar fallando porque la ruta queda muy larga

    tambien podria ser porque usas Win 7 y este es bastante restrictivo para el acceso a Program Files, deberias cambiar el manifest para ejecutar como administrador

    How To Force C# Application To Only Run As Administrator In Windows

    saludos

    ResponderEliminar
  5. hopla muchas gracias.. disculpe ahora una condicion para que no me abra todo lo de la compu sino solamente una carpeta que yo desida que este en el disco C ?? porfavor y gracias

    ResponderEliminar
  6. Hola, cómo usaría este código en mi proyecto MVC ??
    Gracias!!

    ResponderEliminar
    Respuestas
    1. hola
      Pero este ejemplo no aplica a un proyecto web, no puede seleccionar una carpeta en el servidor desde el browser del cliente
      Si podrias obtener los archivos de una carpeta del servidor por emdio del Directory.GetFiles(), pero recuerda usar el Server.MapPath() para obtener la ruta fisica
      saludos

      Eliminar
  7. Los enlaces no funcionan :(
    (interesado en el de C#)

    Gracias.

    ResponderEliminar