> Manuales > File System Object en ASP

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 p?gina que nos muestra todos los directorios de nuestro disco principal (C:) y nos permita seleccionar cualquier carpeta para explorar tambi?n todos sus subcarpetas. En cada p?gina que muestra una carpeta se puede volver al directorio padre (excepto en la ra?z, que no tiene padre) y entrar en una subcarpeta.

Este script, si no recibe ninguna carpeta por par?metro en el formulario, muestra el contenido de la carpeta padre. Al pulsar sobre una carpeta se env?a 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 bot?n para volver a la carpeta padre y una serie de botones para meterse en un subdirectorio de la carpeta que se visualiza.

Referencia: Esta pr?ctica se podr? entener mejor leyendo los cap?tulos precedentes del Manual del FileSystemObject de ASP, donde est? englobada. Prestando especial atenci?n a la descripci?n del objeto Folder.

El c?digo 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 colecci?n de carpetas
set coleccionCarpetas = carpeta.subFolders

'para cada carpeta coloco un bot?n 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 ra?z (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 m?todo GetFolder().

Nota: El m?todo 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 p?gina que utilice ese m?todo, sin originar respuesta alguna, ni siquiera de error. La soluci?n pasa por detener la funci?n 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 bot?n de formulario. Puede haber un problema si el directorio que se ha recibido es el ra?z, pues este no tiene directorio padre y fallar?a el script, por eso est? el segundo IF, que comprueba que no sea el directorio ra?z antes de poner el bot?n 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 colecci?n de subFolders (subdirectorios), colocando un bot?n para cada uno de los subdirectorios, que al pulsarse se enviar? su valor a la p?gina para mostrar dicho subdirectorio.

Fij?monos que todos los botones son de tipo submit. Todos est?n nombrados como name="carpeta" y eso sirve para que al pulsar cualquier bot?n de submit se env?e en una variable de formulario (con el nombre "carpeta") el value asociado al bot?n de submit que se ha pulsado.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual