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