Objeto FileSystemObject
La función de este componente es permitir el acceso al sistema de archivos del
servidor. Gracias al
objeto FileSystemObject podremos manipular ficheros de texto, directorios,
ficheros genéricos y
unidades de disco desde nuestras páginas ASP.
Para instanciar un objeto FileSystemObject lo haremos de la misma forma que
hacíamos con el objeto
Dictionary o que con cualquier objeto.
Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
<OBJECT RUNAT="SERVER" SCOPE="PAGE" ID="objFSO"
PROGID="Scripting.FileSystemObject">
</OBJECT>
Al utilizar el objeto FileSystemObject puede ser interesante añadir una
referencia a su librería de tipos
para poder hacer uso de las constantes definidas en la misma.
<!--METADATA TYPE="typelib" FILE="C:\Winnt\system32\scrrun.dll"-->
Muy relacionados con este objeto se encuentran los objetos Drive, File, Folder y
TextStream, ya que a
partir de un objeto FileSystemObject vamos a obtener instancias de estos otros
componentes de
VBScript. Por ejemplo, a través del método GetDrive() del objeto
FileSystemObject se obtiene un
objeto Drive.
Además este objeto presenta una única propiedad llamada Drives, que es una
colección de objetos
Drive que representa todas las unidades existentes en el servidor Web,
incluyendo las unidades de red.
Por el contrario el objeto FileSystemObject ofrece un gran número de métodos, a
continuación vamos
a comentar todos ellos y los vamos a agrupar atendiendo a las funciones que
ofrecen los mismos.
Métodos para trabajar con unidades de disco
• DriveExists(unidadDisco): devuelve verdadero si la unidad de disco indicada
existe, devuelve
falso en caso contrario. El parámetro que identifica a la unidad puede tener el
formato c, c:, c\,
o \\maquina\nombreCompartido, o el camino completo a un fichero o directorio.
• GetDrive(unidadDisco): devuelve un objeto Drive que se corresponde con la
unidad
especificada. A través del objeto Drive podremos obtener información detallada
de la unidad a
través de las propiedades que ofrece este objeto y que veremos en el apartado
correspondiente.
• GetDriveName(unidadDisco): devuelve una cadena que representa al nombre de la
unidad
indicada.
Vamos a realizar un sencillo ejemplo que comprueba las unidades de disco que
existen en el servidor,
mostrando también su nombre completo. Para ello se utiliza un bucle con los
códigos ANSI desde la A
a la Z, si la unidad existe se muestra junto con su nombre completo.
<%Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
For i=65 To 90 'códigos ANSI de la A a la Z
letra=Chr(i)&":"
If objFSO.DriveExists(letra) Then
Response.Write "Unidad encontrada, nombre:
"&objFSO.GetDriveName(letra)&"<br>"
End if
Next%>
Resultados:
Unidad encontrada, nombre: A:
Unidad encontrada, nombre: B:
Unidad encontrada, nombre: C:
Métodos para trabajar con carpetas
• BuildPath(ruta, nombre): devuelve una cadena que resulta de añadir el fichero
o directorio
indicado en nombre a la ruta especificada, añadiendo un caracter \ si es
necesario.
Programación de aplicaciones para Internet con ASP © Grupo EIDOS
• CopyFolder(origen, destino, sobreescribir): copia la carpeta o carpetas
indicadas en origen,
pudiéndose utilizar caracteres comodín, a la carpeta de destino especificada,
incluyendo todo
el contenido de la carpeta origen, es decir, se trata de una copia recursiva. En
sobreescribir
indicaremos True o False según proceda, el valor por defecto es True. Se
producirá un error si
la carpeta de destino existe y el valor de sobreescribir es False. Para poder
copiar una carpeta,
y en definitiva para poder realizar cualquier operación de escritura, es
necesario que el usuario
anónimo de Internet (IUSR_NombreMaquina), posea los permisos necesarios para
realizar
tales operaciones. Esto es aplicable a todos los objetos del sistema de
archivos. Tanto origen
como destino deben ser rutas físicas. Si destino finaliza en \ se copiará el
origen en la carpeta
destino, en caso contrario se creará la carpeta destino.
• CreateFolder(nombreCarpeta): crea el directorio con la ruta y nombre
especificados. Se
produce un error si la carpeta ya existe.
• DeleteFolder(carpeta, forzar): elimina la carpeta especificada junto con todo
su contenido,
permitiendo utilizar caracteres comodín. Si el parámetro forzar tiene el valor
True se eliminará
la carpeta aunque sólo sea de lectura, el valor por defecto de este parámetro es
False.
• FolderExits(carpeta): devuelve verdadero si la carpeta indicada existe, y
falso en caso
contrario.
• GetAbsolutePathName(ruta): devuelve la ruta completa correspondiente a la que
indicamos
por parámetro. Desde la ejecución de una página ASP este valor siempre será
c:\winnt\system32.
• GetFolder(carpeta): devuelve un objeto Folder que se corresponde con la
carpeta indicada. A
través del objeto Folder se podrá obtener información detallada de la carpeta y
también se
podrá manipular a través de los métodos que ofrece el objeto Folder.
• GetParentFolderName(ruta): devuelve el nombre de la carpeta padre de la ruta
especificada.
No comprueba si la ruta existe.
• GetSpecialFolder(carpeta): devuelve un objeto Folder que se corresponde con la
carpeta
especial indicada, podemos indicarlo mediante las constantes definidas en la
librería de tipos
del objeto FileSystemObject, estas constantes son: WindowsFolder(0),
SystemFolder(1) y
TemporaryFolder(2).
• MoveFolder(origen, destion): mueve la carpeta o carpetas indicadas en el
origen al destino
especificado, en el parámetro origen se pueden utilizar comodines. Se producirá
un error si la
carpeta de destino ya existe. Si destino finaliza en \ se asume que es un
directorio en el que se
moverá el directorio de origen, en caso contrario se asumirá que es el nombre
del nuevo
directorio.
El Código fuente siguiente es un pequeño resumen que muestra la utilización de
este grupo de métodos del
objeto FileSystemObject.
<%Set objFSO=Server.CreateObject("Scripting.FileSystemObject")%>
BuildPath devuelve: <%=objFSO.BuildPath("c:\winnt\tmp","fichero.txt")%><br>
<%objFSO.CopyFolder "c:\asfroot","c:\temp"
Response.Write "carpeta copiada<br>"
objFSO.CreateFolder "c:\tmp\Carpeta Nueva"
Response.Write "carpeta creada<br>"%>
FolderExists devuelve: <%=objFSO.FolderExists("c:\tmp\Carpeta Nueva")%><br>
<%objFSO.DeleteFolder "c:\tmp\*.*"
Response.Write "carpeta borrada<br>"%>
AbsolutePathName devuelve: <%=objFSO.GetAbsolutePathName("origen")%><br>
GetParentFolderName devuelve: <%=objFSO.GetParentFolderName("c:\tmp\Carpeta
Nueva")%><br>
<%objFSO.MoveFolder "c:\tmp","c:\asfroot\Nueva Carpeta"
Response.Write "La carpeta se ha movido<br>"%>
Resultados:
BuildPath devuelve:
c:\winnt\tmp\fichero.txt
carpeta copiada
carpeta creada
Folder exists devuelve true
carpeta borrada
AbsolutPathName devuelve:
C:\Winnt\system32\origen
GetParentFolderName devuelve c:\temp
La carpeta se ha movido
Métodos para trabajar con ficheros
• CopyFile(origen, destino, sobreescibir): copia el fichero o ficheros
especificados en origen al
destino indicado. Si destino finaliza con \ entonces se asume que destino es una
carpeta, en
caso contrario se asume que es el nombre del fichero de destino. Se producirá un
error si el
fichero de destino ya existe y sobreescribir tiene el valor falso.
• CreateTextFile(nombreFichero, sobreescibir, unicode): crea un nuevo fichero de
texto con el
nombre de fichero especificado y devuelve un objeto TextStream que representa al
fichero de
texto. Si el parámetro sobreescibir, que es opcional, tiene el valor True el
fichero si existe se
sobreescibirá, por defecto tiene valor False. El parámetro unicode tambi´én es
opcional y si
tiene el valor True se creará el contenido del fichero en texto en formato
unicode, el valor por
defecto de este parámetro es False.
• DeleteFile(nombreFichero, forzar): borra el fichero o ficheros especificados,
ya que permite
utilizar comodines. Para borrar ficheros de sólo lectura se debe indicar True en
el parámetro
forzar, su valor por defecto es False. Si el fichero no existe se producirá un
error.
• FileExists(nombreFichero): devuelve verdadero si el fichero indicado existe,
devolverá falso
en caso contrario.
• GetBaseName(nombreFichero): devuelve únicamente el nombre del fichero
indicado, sin ruta
y sin extensión.
• GetExtensionName(nombreFichero): devuelve únicamente la extensión del fichero
indicado.
• GetFile(nombreFichero): devuelve un objeto File que va a representar al
fichero indicado en el
parámetro. Mediante las propiedades y métodos de File podremos obtener
información
detallada del fichero y realizar operaciones con el.
• GetFileName(nombreFichero): devuelve el nombre del fichero indicado junto con
su
extensión.
• GetTempName(): devuelve un nombre de fichero generado aleatoriamente, que se
puede
utilizar para crear ficheros temporales.
• MoveFile(origen, destino): mueve el fichero o ficheros especificados en origen
a la carpeta
indicada en destino. Si destino finaliza con \ se asume que es el directorio en
el que se va a
mover el fichero, en caso contrario destino será la ruta y el nombre del nuevo
fichero. Si el
fichero de destino existe se producirá un error.
• OpenTextFile(nombreFichero, modo, crear, formato): crea un fichero de texto
con el nombre
indicado y devuelve un objeto TextStream que permite manipularlo, el resto de
los parámetros
son opcionales. El modo puede ser una de las siguientes constantes
ForReading(1), es decir,
de sólo lectura, ForWriting(2), para escritura eliminando todos los contenidos,
y
ForAppending(8), de escritura para añadir contenidos sin eliminar los
existentes, por defecto
el valor de este parámetro es ForReading. El fichero si se abre para escritura y
no existe y el
parámetro crear tiene el valor True se creará un nuevo fichero, por defecto el
valor de este
parámetro es False. Los formatos válidos del fichero son TristateFalse(0) para
abrirlo como
texto ASCII, TristateTrue(-1) para abrir el fichero como unicode y
TristateUseDefault(-2) para
abrir el fichero utilizando el formato por defecto del sistema. Por defecto el
parámetro formato
tiene el valor TristateFalse.
Al igual que hicimos con el grupo de métodos anteriores, vamos a mostrar un
ejemplo resumen de
utilización de todos estos métodos (Código fuente siguiente).
<%Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "c:\Work\image5.gif","c:\basura\",True
Response.Write "Fichero copiado<br>"
objFSO.CreateTextFile "c:\work\fichero.txt"
Response.Write "Fichero creado<br>"
objFSO.DeleteFile "c:\tmp\*.gif"
Response.Write "Ficheros borrados<br>"%>
FileExists devuelve: <%=objFSO.FileExists("c:\Work\image5.gif")%><br>
GetBaseName devuelve: <%=objFSO.GetBaseName("c:\Work\image5.gif")%><br>
GetExtensionName devuelve:
<%=objFSO.GetExtensionName("c:\Work\image5.gif")%><br>
GetFileName devuelve: <%=objFSO.GetFileName("c:\Work\image5.gif")%><br>
GetTempName devuelve: <%=objFSO.GetTempName()%><br>
<%objFSO.MoveFile "c:\basura\image5.gif","c:\tmp\"
Response.Write "El fichero se ha movido<br>"
objFSO.OpenTextFile "c:\work\fichero.txt"
Response.Write "Fichero abierto<br>"%>
Resultados:
Fichero copiado
Fichero creado
Ficheros borrados
FileExists devuelve True
GetBaseName devuelve: image5
GetExtensionName devuelve image5.gif
GetTempName devuelve: rad5DAEO.tmp
El fichero se ha movido
Fichero abierto
Como se ha podido comprobar el objeto FileSystemObject es bastante complejo
ya que ofrece una
gran funcionalidad, ahora vamos a pasar a tratar cada uno de los objetos
relacionados con
FileSystemObject, es decir, los objetos Drive, que representa a una unidad,
Folder, que representa a
una carpeta, File, que representa a un fichero y TextStream que representa a un
fichero de texto