Foros del Web » Programando para Internet » ASPX (.net) »

¿Mostrar el contenido de un directorio?

Estas en el tema de ¿Mostrar el contenido de un directorio? en el foro de ASPX (.net) en Foros del Web. Hola amigos!! me gustaría mostrar el contenido de un directorio para que un determinado usuario (que previamente habrá tenido que validarse) pueda ver y descargar ...
  #1 (permalink)  
Antiguo 15/02/2007, 05:57
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
¿Mostrar el contenido de un directorio?

Hola amigos!!

me gustaría mostrar el contenido de un directorio para que un determinado usuario (que previamente habrá tenido que validarse) pueda ver y descargar en su caso los diferentes archivos y carpetas que haya subido previamente.

cómo podría hacerlo? uso ASP .NET, el framework 1.1 de .NET y el Visual Studio 2003

graciasss!!!
  #2 (permalink)  
Antiguo 15/02/2007, 09:37
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Sonrisa Re: ¿Mostrar el contenido de un directorio?

Hola SuperPinwi!

Utilizando únicamente las herramientas del VS, una de las soluciones sería, utilizar la libreria System.IO, la cual te provee de los métodos necesarios para recorrer y explorar directorios en el servidor, una vez hecho eso, podrías utilizar el componente TreeView para mostrar la información obtenida, y para la descarga utilizar el evento que se produce al seleccionar una sección del TreeView.

Puede parecer algo complicado, pero todo está en ponerse, sino otra solución es utilizar algún componente de terceros.
  #3 (permalink)  
Antiguo 15/02/2007, 10:31
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

string []archivos = Directory.GetFiles(path);
__________________
:si: El hombre es el único animal que come sin tener hambre, bebe sin tener sed y habla sin tener nada que decir. :si:
  #4 (permalink)  
Antiguo 15/02/2007, 11:43
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

gracias a los dos por contestar!! al final encontré un código en una página q me ayudó bastante ya me muestra el contenido del directorio, lo único q no me hace bien es descargar los ficheros porque la ruta en la q se encuentran es distinta de la página desde la cual los llamo...

este es el código

Código:
<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
  Sub Page_Load(sender as Object, e as EventArgs)
    Dim dirInfo as New DirectoryInfo(Server.MapPath(""))
    
    articleList.DataSource = dirInfo.GetFiles("*.aspx")
    articleList.DataBind()
  End Sub
</script>

<asp:DataGrid runat="server" id="articleList" Font-Name="Verdana"
    AutoGenerateColumns="False" AlternatingItemStyle-BackColor="#eeeeee"
    HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
    HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
  <Columns>
    <asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name" 
           HeaderText="File Name" />
    <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time"
        ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
    <asp:BoundColumn DataField="Length" HeaderText="File Size"
		ItemStyle-HorizontalAlign="Right" 
		DataFormatString="{0:#,### bytes}" />
  </Columns>
</asp:DataGrid>
sabéis cómo podría cambiar la ruta del hipervínculo? es simplemente q en vez de estar en root, el fichero está en root/SuperPinwi por ejemplo...

gracias!!!

saludines!
  #5 (permalink)  
Antiguo 16/02/2007, 02:35
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola!

Server.MapPath("") selecciona el directorio raíz, para poder seleccionar otro directorio sólo has de introducirlo entre las "", por ejemplo:

Dim dirInfo as New DirectoryInfo(Server.MapPath("SuperPinwi"))

o

Dim dirInfo as New DirectoryInfo(Server.MapPath("SuperPinwi/Documentos"))

no pongas las / delante del primer subdirectorio.


Saludos,
  #6 (permalink)  
Antiguo 16/02/2007, 04:00
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

Muchas gracias Juan, pero la verdad es q sigue sin hacerlo bien. Vamos mostrar muestra bien el contenido del directorio (me refiero al directorio del usuario, por ejemplo root/SuperPinwi), el problema viene a la hora de seguir el vínculo, q en vez de ir a http://localhost/root/SuperPinwi, intenta buscarlo en http://localhost/root, y evidentemente da error... esto es muy raro, llevo un montón de horas ya con esto y no hay manera

Si se os ocurre algo, decidme porfi q me estoy volviendo loca ya!

Saludines y feliz fin de semana!
  #7 (permalink)  
Antiguo 16/02/2007, 04:29
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola!

Mira, creo que esto soluciona el problema del link, a la propiedad DataNavigateUrlField del DataGrid, estas pasandole el nombre del fichero, por eso intenta acceder al directorio raíz, has de pasarle la ruta del fichero, para ello pasale el valor FullName en lugar del valor Name, quedaría así:

Código:
<asp:DataGrid runat="server" ID="articleList" Font-Name="Verdana" AutoGenerateColumns="False"
                AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
                HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
                <Columns>
                    <asp:HyperLinkColumn DataNavigateUrlField="FullName" DataTextField="Name" HeaderText="File Name" />
                    <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time" ItemStyle-HorizontalAlign="Center"
                        DataFormatString="{0:d}" />
                    <asp:BoundColumn DataField="Length" HeaderText="File Size" ItemStyle-HorizontalAlign="Right"
                        DataFormatString="{0:#,### bytes}" />
                </Columns>
</asp:DataGrid>
Saludos y buen fin de semana!!!
  #8 (permalink)  
Antiguo 16/02/2007, 04:38
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

mmmm con eso sí q va a la carpeta del usuario pero aún así no lo hace bien, porque intenta seguir un vínculo de este tipo:

file:///c:/inetpub/wwwroot/root/superpinwi/archivo.doc

así q ahora no da error pero tampoco es q abra ni descargue el fichero, ays q cometarros es esto joer!! jaja

muchas gracias de todos modos Juan, parece q la solución está algo más cerca, a ver si hay suerte!!

Saludines!!
  #9 (permalink)  
Antiguo 16/02/2007, 06:16
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola,

Tienes razón a mi tampoco me ha funcionado de esta forma, bueno he hecho un método con el cual se corrige el problema, sólo has de añadirlo, se tiene que ejecutar después de cada evento ItemDataBound, como indica el Handles.

Código:
Protected Sub articleList_Link(ByVal rutaFichero As Object, ByVal e As DataGridItemEventArgs) Handles articleList.ItemDataBound
        If e.Item.Cells(0).Controls.Count > 0 Then

            Dim a As HyperLink
            a = CType(e.Item.Cells(0).Controls(0), HyperLink)
            a.NavigateUrl = a.NavigateUrl.Replace(Server.MapPath(""), "~")

        End If
End Sub
No estoy muy puesto en VB, pero espero que esto te sirva.

Saludos y buen fin de sema!! Besets!
  #10 (permalink)  
Antiguo 16/02/2007, 06:57
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

me dice esto ahora

Error de compilación
Descripción: Error durante la compilación de un recurso requerido para dar servicio a esta solicitud. Revise los detalles de error específicos siguientes y modifique el código fuente en consecuencia.

Mensaje de error del compilador: BC30506: La cláusula Handles requiere una variable WithEvents.

Error de código fuente:



Línea 45: End Sub
Línea 46: '
Línea 47: Protected Sub articleList_Link(ByVal rutaFichero As Object, ByVal e As DataGridItemEventArgs) Handles articleList.ItemDataBound
Línea 48: If e.Item.Cells(0).Controls.Count > 0 Then
Línea 49:

dónde debería colocar el withEvents??

mil gracias por todas las molestias!!! Besos
  #11 (permalink)  
Antiguo 16/02/2007, 07:25
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola!

Aquí tienes todo el código de la página que he utilizado para la prueba:

Código:
<%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        Dim dirInfo As New DirectoryInfo(Server.MapPath("SuperPinwi"))
    
        articleList.DataSource = dirInfo.GetFiles("*.*")
        articleList.DataBind()
    End Sub
    
    Protected Sub articleList_Link(ByVal rutaFichero As Object, ByVal e As DataGridItemEventArgs) Handles articleList.ItemDataBound

        If e.Item.Cells(0).Controls.Count > 0 Then

            Dim a As HyperLink
            a = CType(e.Item.Cells(0).Controls(0), HyperLink)
            a.NavigateUrl = a.NavigateUrl.Replace(Server.MapPath(""), "~")

        End If

        Return
    End Sub
</script>

<html>
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DataGrid runat="server" ID="articleList" Font-Name="Verdana" AutoGenerateColumns="False"
                AlternatingItemStyle-BackColor="#eeeeee" HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
                HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
                <Columns>
                    <asp:HyperLinkColumn DataNavigateUrlField="FullName" DataTextField="Name" HeaderText="File Name" />
                    <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time" ItemStyle-HorizontalAlign="Center"
                        DataFormatString="{0:d}" />
                    <asp:BoundColumn DataField="Length" HeaderText="File Size" ItemStyle-HorizontalAlign="Right"
                        DataFormatString="{0:#,### bytes}" />
                </Columns>
            </asp:DataGrid>
    </div>
    </form>
</body>
</html>
Espero que así te funcione, ya me dirás.

Saludos!
  #12 (permalink)  
Antiguo 16/02/2007, 07:40
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

muchas gracias pero me sale el mismo error (Mensaje de error del compilador: BC30506: La cláusula Handles requiere una variable WithEvents)

este mismo error me acuerdo q me dio mientras programaba en vb .net con unos botones de un formulario jejeje pero bastó añadir en la declaración el WithEvents y ya me funcionó. Aquí la verdad q no sé cómo resolverlo porque no sé dónde debería decirle dónde se produce el evento realmente... mmmm seguiré comiéndome el coco jejejejeje

pasa muy buen finde

Pd: por si tiene algo q ver,el framework que utilizo de .NET es el 1.1
  #13 (permalink)  
Antiguo 16/02/2007, 09:11
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola!

Un intento más , si estas trabajando con el Net 1.1 prueba esto:

En la región oculta de código, la que genera automáticamente el diseñador, busca el DataGrid articleList y asegurate de que está declarado como sigue, sino cambialo:

Protected withevents articleList as system.web.ui.webcontrols.DataGrid

Con el .Net 2 no he tenido ningún problema ya que el control DataGrid se declara como withevents, pero por lo que he leido en el .Net 1.1 puede que sea diferente.

Espero que por fin puedas solucionarlo con esto, animo!

Saludos,
  #14 (permalink)  
Antiguo 19/02/2007, 10:21
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

Hola Juan,

realmente no uso el visual studio, si no que lo estoy programando todo a pelo con el dreamweaver (vamos casi como si lo hiciera con el bloc de notas). Si incluyo esa declaración me da el error

BC30260: 'articleList' ya se declaró como 'Protected Dim articleList As System.Web.UI.WebControls.DataGrid' en class.

y realmente no es q esté declarado otra vez, ya que al hacerlo sin el visual studio no se me ha podido generar automáticamente esa declaración.

Estoy buscando por ahí detalles del error pero no encuentro nada que me sirva de ayuda. Ya no sé qué más hacer, esto es una locura!!!

Gracias, saludos!
  #15 (permalink)  
Antiguo 20/02/2007, 06:18
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

weno decir q lo he intentado con el visual studio también y q no hace nada... vamos igual q tal y como yo lo tenía con el dreamweaver. Esto de programar a veces resulta desquiciante, no entiendo porqué lo muestra bien y hace mal el vínculo joooooooo

saludines
  #16 (permalink)  
Antiguo 22/02/2007, 05:24
Avatar de juamurex  
Fecha de Ingreso: febrero-2007
Ubicación: Gandía (Valencia)
Mensajes: 18
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: ¿Mostrar el contenido de un directorio?

Hola!

Bueno, no me he dado por vencido y he modificado el método Page_Load, ahora ya no tienes que utilizar eventos, que era lo que te daba error, aquí tienes el nuevo método:

Código:
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        Dim dirInfo As New DirectoryInfo(Server.MapPath("SuperPinwi"))
        Dim listado As System.IO.FileInfo() = dirInfo.GetFiles("*.*")
        
        Dim tabla As New Data.DataTable
        tabla.Columns.Add("FullName")
        tabla.Columns.Add("Name")
        tabla.Columns.Add("LastWriteTime")
        tabla.Columns.Add("Length")
        
        For i As Integer = 0 To listado.Length - 1

            tabla.Rows.Add(listado(i).FullName.Replace(Server.MapPath(""), "~"), listado(i).Name, listado(i).LastWriteTime, listado(i).Length)                            
            
        Next
        
        articleList.DataSource = tabla
        articleList.DataBind()
        
End Sub
Te explico, el problema era que el valor que te devolvía la propiedad FullName era la ruta fisica en el sistema de directorios del pc, lo que queremos es la ruta al fichero desde el servidor. Para ello lo que he hecho es crear una DataTable con las columnas que nos interesan y he modificado el valor de FullName.

Esto si que debería funcionarte.

Saludos!!!

PD: Te escribiré el mismo mensaje en el nuevo hilo que has creado.
  #17 (permalink)  
Antiguo 24/05/2007, 01:23
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

Agradezco a Juan su inestimable ayuda pero tras varios meses en los q lo dejé apartado por fin acabo de dar con la solución hace tan solo unos minutos...

se trata de añadir el subdirectorio al que se desea acceder con los enlaces como una de las propiedades del datagrid

DataNavigateUrlFormatString="SuperPinwi/{0}"

y así, sí
__________________
Si has construido un castillo en el aire, no has perdido el tiempo, es allí donde debería estar. Ahora debes construir los cimientos debajo de él.
  #18 (permalink)  
Antiguo 24/05/2007, 02:40
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: ¿Mostrar el contenido de un directorio?

habría ahora alguien q me dijera cómo puedo hacer para que el directorio cambie según el usuario actual?? Tengo ya creada una variable de sesión del estilo:

Dim info As String
info = Session("info").ToString


si pongo en el DataNavigateUrlString "info", intenta buscar los archivos en la carpeta /info, cuando yo quiero que lo busque en "Pepe", o en "SuperPinwi" o cualquiera q sea el nick del usuario actual. Ah y tampoco le puedo pasar directamente Session("info").ToString porque lo interpreta como una cadena de texto, no cómo una variable

graciassss
__________________
Si has construido un castillo en el aire, no has perdido el tiempo, es allí donde debería estar. Ahora debes construir los cimientos debajo de él.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:56.