Listar los subdirectorios de un directorio

  • Por
Taller de ASP para listar todas las carpetas del directorio raíz del disco duro en ASP.
Vamos a hacer un ejemplo de acceso al directorio raz de nuestro disco duro para listar cada una de las carpetas que contiene y alguna de sus propiedades.

<%
'Conecto con el sistema de archivos
set FSO = server.createObject("Scripting.FileSystemObject")
'creo el objeto disco C:
set discoC = FSO.GetDrive("c")
'Tomo el directorio raiz
set raiz = discoC.rootFolder
'extraigo la coleccion de carpetas
set coleccionCarpetas = raiz.subFolders

'para cada carpeta imprimo su nombre y su camino completo desde la raiz
for each carpeta in coleccionCarpetas
    response.write "<b>Carpeta " & carpeta.name & "</b>:<br>"
    response.write "Path: " & carpeta.path
    response.write ", Nombre corto: " & carpeta.ShortName
    response.write ", Atributos: " & carpeta.Attributes
    response.write "<p>"
next
%>


El ejemplo se realiza accediendo a travs del mtodo GetDrive() del FSO, para obtener la unidad C. Luego, de la unidad obtenida se extrae el directorio raz, a travs de la propiedad RootFolder del objeto Drive. RootFolder es ya un objeto Folder y como tal tiene una coleccin de subcarpetas en su propiedad SubFolders.

A la coleccin de subcarpetas de nuestro directorio raz se le hace un recorrido con un bucle FOR EACH. Para cada carpeta se escribe su nombre, seguido de la ruta completa hasta la carpeta, el nombre corto que tendra en un sistema MS-DOS y sus atributos.

La numeracin de los atributos es a base de potencias de dos, as, el atributo 17 quiere decir que tiene los atributos 16 y 1 (2 elevado a 4 y 2 elevado a 0). En castellano: un directorio de solo lectura.

En este ejemplo ya se empieza a ver la navegacin por el sistema de ficheros, aunque slo nos hayamos quedado a nivel de carpetas. El esquema es el comentado anteriormente:

FSO > GetDrive() (para obtener una unidad) > RootFolder (para obtener la carpeta raz de una unidad > Subfolders (para obtener la lista de subcarpetas del directorio, en este caso el raz).

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

Cristian

30/3/2007
buscaba algo para listar los archivos y subdirectorios para crear un menu dinamico
segun los contenidos de una carpeta

acabe desarrollando esto:

<%
'creo una matriz para almacenar nombres de carpetas para el javascript
'que oculta mis tablas al cargar la pagina
dim tablas(), x
'inicializo el activex para archivos
set fso = server.CreateObject("scripting.filesystemobject")
'tomo la carpeta en la que se aloja el script
carpeta = server.MapPath(".") & ""
%>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<script type="text/javascript">
function mostrar(idtab){
var fila;var x;
fila=document.getElementById(idtab).getElementsByTagName('tr');
for(x=1;x<fila.length;x++){
if(fila[x].style.display=='none'){
fila[x].style.display='';
document.getElementById('ima'+idtab).src='../FlexlineWEB/carpeta1.gif';
}else{
fila[x].style.display='none';
document.getElementById('ima'+idtab).src='../FlexlineWEB/carpeta0.gif';
}
}
}
</script>
</head>
<body onLoad="redmenu()">
<table id="Principal" width="171" cellpadding="0" cellspacing="0">
<tr>
<td width="18" nowrap>
<img id="imaPrincipal" src="../FlexlineWEB/carpeta0.gif"
width="16" height="16" alt=""></td>
<td width="151" nowrap onClick="mostrar('Principal')">
<b>
<% response.write(carpeta & "<br>") %></b></td>
</tr><% call subdir(carpeta) %>
</table>
<%
' creo un procedimiento para listar los directorios
sub subdir(dir)
set C = fso.getfolder(dir)
if len(x)=0 then x=0
'recorro los subdirectorios
for each carpeta in C.subfolders
'redimensiono mi matriz
redim preserve tablas(x)
tablas(x)=carpeta.name 'almaceno el nombre del directorio para la funcion javascript
x = x + 1
%><tr>
<td nowrap>&nbsp;</td>
<td>
<table id="<%= carpeta.name %>" cellspacing="0" cellpadding="0">
<tr><td><img id="ima<%= carpeta.name %>" src="../FlexlineWEB/carpeta0.gif"
width="15" height="14" alt=""></td>
<td width="151" nowrap onClick="mostrar('<%= carpeta.name %>')">
<b><%= carpeta.name %></b></td>
</tr>
<%
'almaceno array de ficheros para buscarlos
set ficheros = carpeta.files
call subdir(carpeta.path) 'aqui vuelvo a llamar al procedimiento para
'listar subdirectorios dentro del anterior
call archivos(ficheros) 'llamo al procedimiento que indica los archivos
'dentro del directorio
%>
</table></td></tr>
<%
next
end sub
' procedimiento que indica los archivos
sub archivos(carpeta)
for each A in carpeta
set archivo = fso.getfile(A)
%>
<tr>
<td>&nbsp;</td>
<td nowrap><%= archivo.name %></td>
</tr>
<%
next
end sub
%>
</body>
<script type="text/javascript">
function redmenu(){
var fila;var x;
<%
x=0
for x = lbound(tablas) to ubound(tablas)
%>
fila=document.getElementById('<%= tablas(x) %>').getElementsByTagName('tr');
for(x=1;x<fila.length;x++){
fila[x].style.display='none';
}
fila=''
<%
next
%>
}
</script>
</html>

a mas de alguien le puede servir