El método Server.CreateObject
Server.CreateObject("Scripting.FileSystemObject")
Otros objetos muy interesantes que pueden crearse con Server.CreateObject() son los de acceso a archivos de texto. En el siguiente ejemplo se crean dos objetos:
- FS que es un objeto FileSystem que permite acceder al sistema de ficheros del servidor.
- Fichero que es un objeto TextStream que permite acceder a un fichero de texto llamado texto.txt en modo lectura o escritura.
La segunda instrucción creará, en modo escritura, el fichero texto.txt en la ruta especificada, y lo borrará creándolo de nuevo, si ya existe.
<%
Set FS = Server.CreateObject("Scripting.FileSystemObject")
Set Fichero = FS.CreateTextFile("C:\ASP\texto.txt", True)
%>
El parámetro True es opcional. Indica si un archivo existente se quiere sobrescribir. El valor debe ser True si el archivo se quiere crear nuevo; False si, existiendo, no se quiere sobrescribir. Si se omite y el fichero existe, no se borra, ya que el valor por defecto es False, pero ASP dará un mensaje de error, ya que el objeto es de creación de un nuevo fichero, cosa que no puede hacer.
Ahora, para escribir una línea en texto.txt simplemente escribiremos:
<%
Fichero.WriteLine("Esto es una prueba de escritura")
%>
Si lo que se desea es abrir el fichero, en modo lectura, ya existente y previamente cerrado, se escribirá:
<%
Set FS = Server.CreateObject("Scripting.FileSystemObject")
Set Fichero = FS.OpenTextFile("C:\ASP\texto.txt", False)
%>
Y para leer la primera línea:
<%
Response.Write(Fichero.ReadLine)
%>
Hasta aquí verás que podemos crear un fichero nuevo o leer uno ya existente, pero, ¿qué hacer si tenemos que anexar nuevas líneas a un fichero que ya tiene contenidos? La solución la tenemos en el método OpenAsTextStream, que proporciona las mismas funcionalidades que OpenTextFile, pero además permite anexar (append) nuevas líneas sin borrar el fichero ya existente ni su contenido. Previamente habrá que definir algunas constantes para poder realizar las tres operaciones básicas con el fichero:
<%
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Set FS = Server.CreateObject("Scripting.FileSystemObject")
Set Fichero = FS.GetFile("C:\ASP\texto.txt")
Set TS = Fichero.OpenAsTextStream(ForAppending, TristateUseDefault)
%>
Y para escribir una línea en texto.txt añadiéndola a las que ya contenga:
<%
TS.Write("Esto es un segundo registro sin borrar el primero" & vbCrLf)
%>
La constante vbCrLf se encarga de escribir un retorno de carro al final de la línea.
El primer parámetros del método OpenAsTextStream es el modo de apertura, y puede ser:
- ForReading Abre el fichero para lectura.
- ForWriting Abre el fichero para escritura. Si ya existe con el mismo nombre, su contenido anterior se sobrescribe.
- ForAppending Abre el fichero y escribe al final del mismo. El contenido anterior no es alterado.
El segundo parámetro se refiere al formato del fichero. Si se omite, el archivo se abre como ASCII. Puede ser:
- TristateUseDefault Abre el fichero utilizando la forma predeterminada para el sistema.
- TristateTrue Abre el archivo como Unicode.
- TristateFalse Abre el fichero como ASCII (por defecto).
Tanto si se ha abierto el fichero en modo lectura como en escritura, al concluir su procesado se cerrarán el objeto TS:
<%
TS.Close
Set TS = Nothing
%>
Close es en realidad un método, y se encarga de vaciar el buffer y de cerrar el fichero. Después la instrucción Nothing indica al sistema que el objeto ya no está vinculado a ninguna variable, por lo que sus recursos pueden ser recuperados.
Al igual que los objetos RecordSet, los objetos TextStream (en nuestro ejemplo Fichero) también tienen varias propiedades y métodos para moverse por el fichero texto.txt, pero a diferencia de los RecordSet, no es posible moverse hacia atrás. Los ficheros de texto creados con el objeto TextStream son, por tanto, de acceso secuencial. Veamos las propiedades, que son todas de sólo lectura, es decir que sólo pueden utilizarse si el fichero ha sido abierto en modo lectura
( FS.OpenTextFile("C:\ASP\texto.txt", False ):
- Fichero.AtEndOfLine devuelve True si el puntero de archivo está situado inmediatamente a continuación del marcador de fin de línea del archivo; en caso contrario devuelve False.
- Fichero.AtEndOfStream devuelve True si el puntero de archivo se encuentra al final del mismo; en caso contrario devuelve False.
- Fichero.Column devuelve el número de columna de la posición del carácter actual en un archivo. Después de que se haya escrito un carácter de nueva línea mediante VbLf o VbCrLf o utilizado el método Fichero.WriteLine(), pero antes de que se escriba cualquier otro carácter, el valor de Column es 1.
- Fichero.Line devuelve el número de línea actual en el archivo. Después de que se abre por primera vez un archivo y antes de que se escriba nada en él, el valor de Line es 1.
Y a continuación veamos los métodos:
- Fichero.Read(N) Método utilizado para leer un número (N) especificado de caracteres de un archivo, devolviendo la cadena resultante. Dependiendo del valor de N pueden leerse de una a varias líneas.
- Fichero.ReadAll Lee un archivo completo y devuelve la cadena resultante. No es aconsejable utilizarlo con ficheros grandes, ya que podría dejar al servidor sin recursos de memoria. En este caso es preferible leer los ficheros línea a línea.
- Fichero.ReadLine Lee una línea completa hasta encontrar, pero sin incluir, el carácter de nueva línea (VbCrLf) de un archivo devolviendo la cadena resultante.
- Fichero.Skip(N) Omite un número (N) especificado de caracteres al leer un archivo.
- Fichero.Skip(N) Salta a la siguiente línea cuando se lee un archivo.
- Fichero.Write(string) Escribe un string especificado en un archivo. Las cadenas especificadas se escriben en el archivo sin caracteres de separación, delimitadores, ni espacios en blanco entre cada cadena. Y por supuesto, sin el carácter de fin de línea. Hay que utilizar el método WriteLine para escribir un carácter de nueva línea o una cadena que finalice con un carácter de nueva línea.
- Fichero.WriteLines([string]) Escribe un string especificado y un carácter de nueva línea a continuación. Si se omite el string de contenido, simplemente se escribe el carácter de nueva línea.
- Fichero.WriteBlankLines(N) Escribe un número (N) de caracteres de nueva línea VbCrLf.