Navegar por la estructura de directorios en ASP

  • Por
Práctica sobre el manejo del objeto Folder del File System Object de ASP. Trata de ejemplificar sencillamente como se haría un navegador de directorios de nuestro disco duro.
Vamos a ver un nuevo ejemplo de trabajo con el sistema de archivos, en concreto con el objeto Folder (carpeta). Se trata de una pgina que nos muestra todos los directorios de nuestro disco principal (C:) y nos permita seleccionar cualquier carpeta para explorar tambin todos sus subcarpetas. En cada pgina que muestra una carpeta se puede volver al directorio padre (excepto en la raz, que no tiene padre) y entrar en una subcarpeta.

Este script, si no recibe ninguna carpeta por parmetro en el formulario, muestra el contenido de la carpeta padre. Al pulsar sobre una carpeta se enva por formulario la ruta del directorio al que se desea acceder y entonces el script, como s ha recibido una carpeta por formulario mostrar un botn para volver a la carpeta padre y una serie de botones para meterse en un subdirectorio de la carpeta que se visualiza.

Referencia: Esta prctica se podr entener mejor leyendo los captulos precedentes del Manual del FileSystemObject de ASP, donde est englobada. Prestando especial atencin a la descripcin del objeto Folder.

El cdigo es el siguiente:

<form action=navegardirectorios.asp method=post>
<%
'Conecto con el sistema de archivos
set FSO = server.createObject("Scripting.FileSystemObject")

dim carpeta

'Compruebo si recibo una carpeta desde el formulario
if (request.form="") then
    'si no recibo carpeta, tomo la raiz
    'creo el objeto disco C:
    set discoC = FSO.GetDrive("c")
    'Tomo el directorio raiz
    set carpeta = discoC.rootFolder
    'indico en la carpeta que estoy
    response.write "Accediendo a la Raiz<p>"
else
    'si recibo carpeta, la extraigo
    strCarpeta = request.form("carpeta")
    set carpeta = FSO.getFolder(strCarpeta)
    'indico en la carpeta que estoy
    response.write "Accediendo a la carpeta: " & strCarpeta & "<p>"

    'si no es la carpeta raiz, coloco el enlace para ir al padre
    if (not carpeta.isRootFolder) then
       'coloco un enlace para ir a la carpeta padre
       carpeta_padre = carpeta.parentFolder.path
       response.write "Volver a: <input type=submit name=carpeta value='" & carpeta_padre & "'><p>"
    end if
end if

'extraigo la coleccin de carpetas
set coleccionCarpetas = carpeta.subFolders

'para cada carpeta coloco un botn para ir a ella.
for each carpeta in coleccionCarpetas
    response.write "<input type=submit name=carpeta value='" & carpeta.path & "'><br>"
next

%>
</form>


El primer enunciado IF comprueba si se est recibiendo datos por formulario o no. Si no se reciben datos se crea un objeto Folder que llamamos carpeta, que corresponde con la el directorio raz (propiedad rootFolder de la unidad). Si se estaban recibiendo datos del formulario se crea el objeto Folder a partir del valor de la variable carpeta, recibida por formulario, mediante el mtodo GetFolder().

Nota: El mtodo GetFolder(), y otros de los relacionados con el sistema de archivos, tiene un problema con algunos antivirus, pues es considerado como susceptible de pertenecer a un script malicioso. As pues, si utilizamos un antivirus, se nos puede quedar parada la pgina que utilice ese mtodo, sin originar respuesta alguna, ni siquiera de error. La solucin pasa por detener la funcin de bloqueo de scripts del antivirus.

En el caso de recibir datos por el formulario se entiende que se est recibiendo un directorio del sistema y para que se pueda volver al directorio padre se pone un botn de formulario. Puede haber un problema si el directorio que se ha recibido es el raz, pues este no tiene directorio padre y fallara el script, por eso est el segundo IF, que comprueba que no sea el directorio raz antes de poner el botn al padre.

Una vez ya se ha creado el objeto carpeta, por cualquier rama de las dos que tiene el primer IF, podemos hacer un recorrido a su coleccin de subFolders (subdirectorios), colocando un botn para cada uno de los subdirectorios, que al pulsarse se enviar su valor a la pgina para mostrar dicho subdirectorio.

Fijmonos que todos los botones son de tipo submit. Todos estn nombrados como name="carpeta" y eso sirve para que al pulsar cualquier botn de submit se enve en una variable de formulario (con el nombre "carpeta") el value asociado al botn de submit que se ha pulsado.

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

jorge

03/11/2006
hay alguna forma de que el botón no contenga la dirección de la variable sino que la contenga un un campo oculto, asi el nombre del boton va a tener el nombre de la carpeta y no la dirección....

ya lo he intentado y no me funciona y ya les cambie de nombre y todo y no funciona