Listado de los archivos de un directorio con ASP

  • Por
Veamos cómo obtener la lista de archivos que hay dentro de un directorio de nuestro disco duro mediante programación ASP, con el sistema de archivos del sevidor FSO.
En este taller de ASP, que está englobado dentro del manual de File System Object ASP, vamos a mostrar como obtener un listado de los archivos que hay en una carpeta, dentro del sistema de archivos del servidor.

ASP dispone de una serie de objetos para acceder a cualquier recurso dentro de los discos duros del servidor web. Ahora bien, será necesario que en esos discos duros tengamos permisos para poder trabajar. Posiblemente, si probamos los scripts dentro de nuestro ordenador local, no habrá ningún problema para listar los contenidos de cualquier directorio, pero si lo probamos en un servidor de alojamiento compartido, posiblemente tengamos problemas con los permisos, a no ser que estemos intentando acceder a una carpeta que esté dentro de nuestro directorio de publicación.

Ahora veamos un código para mostrar los archivos contenidos en una carpeta. Primero que todo tenemos que decidir el nombre de la carpeta que deseamos explorar, es decir el directorio físico que deseamos listar sus archivos. Algo como C:\inetpub\wwwroot\

Si estamos haciendo pruebas en nuestro ordenador local, podemos conocer perfectamente el nombre de cualquier carpeta, porque sabemos la estructura de discos y directorios de nuestro ordenador. Pero si estamos en un alojamiento compartido, tendremos que hacer una pequeña acción para saber el nombre del directorio físico donde podemos listar sus archivos.

En local, podemos decidir directamente el nombre de la carpeta:

'declaro el nombre de una carpeta
nombre_carpeta = "C:\"

En un alojamiento compartido, podríamos obtener así el nombre de la carpeta física donde está el archivo ASP que estamos ejecutando:

nombre_carpeta = Server.MapPath(".") & "\"

Como se ve, se utiliza el método de Server.mappath() para obtener el nombre de un directorio. A este método se le pasa la ruta relativa del directorio que se desea obtener el nombre físico. En este caso, pasándole ".", nos devolverá el directorio físico donde está el script ASP que estamos ejecutando. Algo como X:\webs\midominio.com\Html\

Una vez tenemos el nombre del directorio que deseamos listar archivos, tenemos que obtener el objeto carpeta de este directorio. Para ello debemos conectar con el sistema de archivos del ordenador:

'Conecto con el sistema de archivos
set FSO = server.createObject("Scripting.FileSystemObject")

Y luego tenemos que extraer el objeto carpeta del directorio deseado:

'creo el objeto carpeta
Set carpeta = FSO.GetFolder(nombre_carpeta)

El siguiente paso es sacar todos los archivos de esa carpeta:

'traigo los archivos de la carpeta
Set archivos = carpeta.Files

Para finalizar, listamos el nombre de cada archivo contenido en la carpeta, mediante un bucle for… each:

'para cada archivo, muestro su nombre.
for each nombre_archivo in archivos
    response.Write "<br>" & nombre_archivo
next

El ejemplo completo sería algo como lo que sigue:

<%
'obtengo el directorio físico de la carpeta donde está este script
nombre_carpeta = Server.MapPath(".") & "\"
response.write "<h1>-" & nombre_carpeta & "</h1>"

'Conecto con el sistema de archivos
set FSO = server.createObject("Scripting.FileSystemObject")

'creo el objeto carpeta
Set carpeta = FSO.GetFolder(nombre_carpeta)

'traigo los archivos de la carpeta
Set archivos = carpeta.Files

'para cada archivo, muestro su nombre.
for each nombre_archivo in archivos
    response.Write "<br>" & nombre_archivo
next
%>

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

jltorres

23/5/2009
Aclaracion de ejemplo
La sintaxis de la solucion no es correcta existen datos que deben aclararse como for each nombre_archivo in archivos envia un error de System.InvalidCastException: Conversion from type 'File' to type 'String' is not valid. seria bueno que si ponen un ejemplo este sea correcto.

Espero y lo puedan corregir o aclararme si soy el que esta mal.

Saludos

esanders

08/7/2009
Acerca de listado de archivos
Si funciona, explora todos los archivos de un directorio, gracias



Atte

JaVioLo

20/10/2009
Problemas
Existen varios problemas al juntar los codigos de acceso a carpetas y de acceso a contenido de esas carpetas.

Podeis hacer algun ejemplo de exploracion de carpetas y ficheros como puede hacerse en Java?

Manuel

05/1/2010
ver ficheros
me gustaría leer como ver los ficheros

jTorres

15/6/2012
El código esta bien
a pesar que esto es de 2009. jltorres, sos un tarado. Si estuviera incorrecto, que no lo está, deberías postear una solución en vez de quejarte. Mala leche.

tcesar dzul

08/8/2013
FUNCIONA MUY BIEN
Dejo el ejemplo de lo que codifique con el código que no proporciona el articulo, si copias el código fuente guárdalo como GET.asp


<%
DIM vruta
DIM vl_destino
vl_destino = Request.QueryString("vl_destino")
vruta = "C:Documents and Settings" ' ruta que queremos examinar

%>
<form action="get.asp?vl_destino=<%=vl_destino%> ">
<%
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Carpeta = FSO.GetFolder(vruta)
Set Subcarpetas = Carpeta.SubFolders

%>
<select name="vl_destino">
<option value="">Seleccionar</option>
<%
For Each SubCarpeta in Subcarpetas
SubCNombre = Subcarpeta.Name
%>
<option value="<%=SubCNombre%>"><%=SubCNombre%></option>
<%Next%>
</select>
<br>
<input type=submit value="BUSCAR">
<br></br><br></br>
<%
if vl_destino = "" then

else
%>
------------------------------<br>
Directorio de Archivos <%=vl_destino%>.<br>
------------------------------<br>
<%
'obtengo el directorio físico de la carpeta donde está este script
'nombre_carpeta = Server.MapPath(".") & ""
'vruta = "D:websysdesweblaboratorio"
nombre_carpeta = vruta&vl_destino
response.write ("<br>")
response.write ("<br>")
response.write "<h1>Direcci&oacute;n : [ " & nombre_carpeta & " ] </h1>"

'Conecto con el sistema de archivos
set FSO = server.createObject("Scripting.FileSystemObject")
'creo el objeto carpeta
Set carpeta = FSO.GetFolder(nombre_carpeta)
'traigo los archivos de la carpeta
Set archivos = carpeta.Files

'para cada archivo, muestro su nombre.
for each nombre_archivo in archivos
response.Write "<br>" & nombre_archivo
next

end if
%>

xavi

19/12/2013
fecha
Muy buen artículo.

¿se podría también mostrar la fecha y tamaño de cada uno los archivos de la carpeta al mismo tiempo?

Fabian

03/1/2017
el codigo de tcesar dzul funciona excelente
he probado varios codigos similares durante varios meses para un sistema en el que trabajo, y este la verdad que muy completo reomendado