Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

Listar Archivos de una carpeta con LinQ y ASP.NET

Algunas veces debemos listar el contenido de una carpeta del servidor en nuestras intranets, por distintos motivos. Ahora que existe LinQ , a mi parecer es mucho más cómodo e intuitivo.

Para el ejemplo, vamos a tener un dropdownlist que va a contener una lista de todas las extensiones de archivo que hay en la carpeta, además un GridView que va a contener una lista con la info de los archivos cuya extensión coincide con lo seleccionado en el dropdownlist.

Partamos por el "Diseño", que es simplemente aplicar un autoformato sobre el GridView :) y el dropdownlist tiene la propiedad autopostback=true

Espacio de Nombres:

Imports System.Linq
Imports System.IO

Diseño:

image 

Ahora veamos el código asociado al iniciar el formulario.

Código:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not Page.IsPostBack Then

Dim tipo= From archivo In Directory.GetFiles("/") _
          Let extension = New FileInfo (archivo).Extension _
          Select Ext = extension, _
                 descripcion = "Archivos " & extension _
         
Distinct

For Each f In tipo
     filtro.Items.Add(New ListItem(f.descripcion, f.Ext))
Next

End If
End Sub

Algunos puntos que debemos ver de este código que sirve para listar en el dropdownlist que se llama filtro. Primero, hacemos la consulta sobre la coleccion que devuelve GetFiles de mi carpeta raíz, luego utilizo Let para setear la variable extension. Hay que tener en cuenta que si asignas a una variable un valor por medio de Let , ya no vas a poder asignarle nuevamente otro valor, es decir, solo una vez puedes asignarle un valor por este medio. Ya que podemos tener varios archivos con la misma extensión, ocupamos Distinct para que solo nos traiga una ocurrencia de "registros". Como vez es lo mismo que ocupar Distinct en una variable SQL.

Protected Sub filtro_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles filtro.SelectedIndexChanged

Dim archivos = From archivo In Directory.GetFiles("/") _
Where Me.filtro.SelectedValue = New FileInfo(archivo).Extension _
Select Nombre = New FileInfo(archivo).Name, _
        FechaCreacion = New FileInfo(archivo).CreationTime, _
        Carpeta = New FileInfo(archivo).DirectoryName, _
        Extension = New FileInfo(archivo).Extension

Me.listado.DataSource = archivos
Me.listado.DataBind()
End Sub

En este código hacemos la consulta que nos trae la información de los archivos cuya extensión coincide con la selección del dropdownlist. Ocupamos Where  para filtrar por la extensión sobre la misma colección y obtenemos la info de los archivos. Luego bindeamos la colección genérica archivos.

image

Y logramos lo que queríamos, espero que te siva!.

Te dejo acá el link el skydrive para que bajes el código.

Nos vemos y gracias por leer este post!.

Gonzalo

Posted: 2/6/2008 3:22 por Gonzalo Perez | con 13 comment(s) |
Archivado en: ,
Comparte este post:

Comentarios

David ha opinado:

Estoy tratando de hacer algo asi y no me funciona. Help:)

Es una intranet que recupera documentos (.tif) almacenados en diferentes directorios que estan colgados de mi sitio :

c: inetpub wwwroot ....misitio dirDocs  doc1 etc,

esos directorios tienen permisos para usuarios grupos...todo hecho para active directory, mi aplicacion autentica por forms y se que funciona porque el Response.Redirect(_archUrl) respeta los permisos.  

PERO el  

_archFile = New System.IO.FileInfo(_archFULLPath) nunca puede abrir el archivo. pero por la url si llega al mismo. Que esta pasando?

saludos!

David

# September 5, 2008 2:17 AM

Gonzalo Perez ha opinado:

Puedes pegar parte del código para ver que esta sucediendo?

gracias!

# September 10, 2008 3:29 PM

AlexHack ha opinado:

Exelente... pero en mi caso necesito listar los archivos de una carpeta que esta en otro equipo.. Sabes como puedo adaptar ese codigo ?.. Agradeceria mucho tu ayuda..

# September 30, 2008 5:59 PM

Gonzalo Perez ha opinado:

Voy a revisar :(, que paso con mis imagenes :(

# October 1, 2008 4:59 PM

Grace ha opinado:

Hola, me gustaria saber si ya tenemos la lista de los archivos como es que los podemos eliminar de esta lista que nos genera esta pagina.

Saludos y gracias de antemano a la ayuda que puedas proporcionarme.

# July 2, 2010 10:05 PM

Corando Benavides ha opinado:

mi mail es cora.ben@gmail.com

esta muy bien el codigo solo quiero preguntar si tendras un ejemplo pero que al dar clik en un archivo el que sea me lo abra y ademas que utilice de root no c: si no una carpeta de mi proyecto donde se suben los archivos por ejemplo upload

# September 2, 2010 12:39 AM

Gonzalo Perez ha opinado:

cvoy a ver si tengo un ejemplo... te aviso!

# September 3, 2010 6:47 AM

Inovercy ha opinado:

Oigan Señores y como manejo las rutas? para iniciar justo de la carpeta donde esta el ASPX que contiene el codigo?

# March 20, 2011 3:11 AM

Mina ha opinado:

Hola Quisiera saber como pudiera manejar rutas relativas con este metodo, que es excelente pero a la hora de implementarlo en un shareHosting no me es posible utilizarlo por la ruta

# March 20, 2011 4:43 AM

Andres ha opinado:

Porque solamente muestra los archivos sys y no los de otra extension?????

# July 15, 2011 9:57 PM

Gonzalo Perez ha opinado:

Por que eran los unicos archivos que tenia esa carpeta en ese momento :)

# July 16, 2011 3:32 AM

vicky ha opinado:

Hola, es muy bueno tu post, necesito ayuda con el codigo: como hago para determinar de qué carpeta quiero que liste los archivos?? Te agradeceria si me respondes a mva216@hotmail.com

Gracias!!

# August 17, 2011 6:53 PM

Gonzalo Perez ha opinado:

Acá se define la carpeta:

Directory.GetFiles("/")

# August 17, 2011 11:25 PM