Lectura y escritura de archivos en ASP

  • Por
Explicación y referencia sobre cómo se puede leer y escribir un fichero en ASP.
En algunas ocasiones es necesario que nuestras aplicaciones realicen acciones de lectura o escritura de ficheros de texto en el servidor.

Por poner un ejemplo, podríamos guardar todos los documentos de los reportajes de nuestro sitio en archivos de texto y desde nuestras páginas ASP podríamos abrir esos archivos de texto y mostrarlos dentro del diseño de nuestro sitio. Esto es una técnica habitual, que utilizamos también en desarrolloweb. Cualquiera que haya programado un poquito conocerá la importancia que tiene el manejo de archivos de texto en programas, de modo que no serán necesarios más ejemplos de usos posibles.

Como estamos en ASP, tenemos que tener en cuenta que los archivos que podemos manipular se encuentran en el servidor, ya que ASP puede tener acceso a los recursos del servidor y no a los del cliente.

Para leer o escribir archivos de texto en el servidor utilizando ASP se ha de crear un objeto File System Object (FSO), que sirve para tener acceso al sistema de archivos del servidor donde están nuestras páginas. Por ahora no hemos hablado mucho del FSO en desarrolloweb.com, pero tenemos pensado hacer una serie de reportajes para tratarlo a fondo. De momento será suficiente que sepamos que para leer o escribir un fichero debemos apoyarnos en el FSO necesariamente. Para crear una conexión con el FSO en nuestras páginas ASP hacemos lo siguiente.

set con_FSO = createObject("scripting.filesystemobject")

En este momento ya tenemos acceso al sistema de archivos a través del File System Object, nuestra variable con_FSO guarda el objeto que realiza la conexión con el sistema de archivos. Ahora debemos crear el objeto TextStream, que será el objeto final que necesitaremos tener para leer o escribir el fichero.

Existen en ASP tres métodos para crear el TexStream que se utilizan en casos distintos, según las acciones que pretendamos realizar con el fichero. Los tres métodos devuelven un objeto TextStream.

CreateTextFile (archivo,sobreescribe,unicode)
Este método creará un fichero en nuestro sistema de archivos y devolverá un objeto TextStream, que es el que utilizaremos para movernos por el fichero, leer o escribir. El parámetro archivo es para indicar la ruta del sistema de archivos del servidor donde se creará el fichero. Los otros dos parámetros son opcionales. Cuando está a true sobrescribe, indica que si había un archivo con ese nombre se sobrescribe. Cuando unicode está a true se indica que el archivo se debe crear con juego de caracteres unicode.

OpenTextFile (archivo,tipo_acceso,crear,formato)
Con este método abrimos un archivo de texto para leer o escribir y nos devuelve el objeto TextStream necesario para realizar las acciones sobre el fichero. El parámetro archivo indica la ruta del fichero a crear. El parámetro tipo_acceso es opcional, indica el tipo de acceso que vamos a realizar, por defecto se abre para lectura, ForReading (1), también podemos abrirlo para escritura ForWriting (2) y para añadir ForAppending (8). Con el parámetro crear, también opcional, se indica si se debe crear el fichero en caso de que no exista, por defecto no se crea. Por último, formato nos sirve para indicar el formato del fichero, ASCII es el predeterminado.

OpenAsTextStream (tipo_acceso,formato)
Es el tercer método para obtener un TextStream, la diferencia es que se aplica a el objeto File (fichero) que no hemos visto, en lugar del objeto FileSystemObject.


Si queremos crear un objeto TextStream a partir de un FSO necesitamos utilizar uno de los dos primeros métodos, siendo el tercero útil para crear un TexStream a partir de un objeto File.

El objeto TextStream

Como hemos señalado, es el que se utilizamos para movernos por el fichero y realizar las acciones sobre el texto, enfocadas a la lectura o escritura. Tiene las siguientes propiedades.

AtEndOfLine vale true si nos encontramos al final de la línea en el fichero.
AtEndOfStream vale true si estamos al final del fichero.
Colum guarda el valor de la columna del carácter actual en el que estamos situados dentro del fichero.
Line guarda el valor de la línea actual.


Los métodos del objeto son los siguientes.

Close() cierra el fichero. Necesario una vez acabado el trabajo.
Read(numero) devuelve un numero de caracteres del fichero.
ReadAll() lee todo el fichero y lo devuelve.
ReadLine() lee una línea entera.
Skip(numero) pasa un numero de caracteres dado.
SkipLine() salta una línea.
Write(texto) escribe un texto dado dentro del fichero
WriteLine(texto) escribe un texto y coloca al fina un salto de línea.
WriteBlankLines(numero) coloca un numero dado de saltos de línea.


Estas notas servirán seguro como buena referencia para realizar cualquier tipo de acción sobre ficheros, pero antes de acabar vamos a ver un ejemplo completo de trabajo con ficheros. Vamos a hacer un pequeño script que crea un fichero y escribe los números del 0 al 9. Luego cerraremos el fichero y lo volveremos a abrir para lectura para sacar su contenido en la página web.

<%
'creamos el nombre del archivo
archivo= request.serverVariables("APPL_PHYSICAL_PATH") & "pruebas.txt"

'conectamos con el FSO
set confile = createObject("scripting.filesystemobject")

'creamos el objeto TextStream
set fich = confile.CreateTextFile(archivo)

'escribimos los números del 0 al 9
for i=0 to 9
   fich.write(i)
next

'cerramos el fichero
fich.close()

'volvemos a abrir el fichero para lectura
set fich = confile.OpenTextFile(archivo)

'leemos el contenido del fichero
texto_fichero = fich.readAll()

'imprimimos en la página el contenido del fichero
response.write(texto_fichero)

'cerramos el fichero
fich.close()
%>


En la primera línea del código creamos el nombre del archivo. El nombre del archivo es una variable cadena que contiene la ruta absoluta del archivo en el sistema del servidor. Como probablemente ocurra en vuestro alojamiento ASP, vosotros no sabéis en qué directorio y disco del servidor están alojadas vuestras páginas (a no ser que seáis vosotros los administradores o estéis trabajando en local). Si es así, necesitaréis algún mecanismo para obtener la ruta donde están vuestros archivos y donde tenéis permisos de lectura y escritura. Con el método
request.serverVariables("APPL_PHYSICAL_PATH") obtenemos la ruta física donde están nuestras páginas. A este camino le concatenamos el nombre del archivo que deseamos crear y ya tenemos el la ruta completa del archivo.

El resto de líneas se pueden entender bien con los comentarios y las notas de arriba en este artículo.

Es importante señalar que para leer y escribir en vuestros directorios necesitaréis los correspondientes permisos de lectura y escritura. Si estáis haciendo pruebas en un sistema Windows95 no necesitaréis permisos, ya que ese sistema no los implementa. En servidores un poco más serios como los que tendrá vuestro proveedor de alojamiento necesitaréis que os otorguen permisos a los directorios donde vayáis a escribir ficheros. Los permisos de lectura suelen estar otorgados desde el principio.

Eso es todo por ahora, esperemos que este artículo sea bien útil para resolver vuestras dudas con el tratamiento de ficheros de texto en ASP.

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

Mario José Méndez Tapia

30/10/2002
Este contenido me sirvio, fue de gran ayuda, ya que estaba desarrollando una pagina donde necesitaba crear un archivo.rtf donde guardar un contenido desde ASP y este codigo me ayudó.
Gracias.

Oscar

19/3/2004
En la línea donde hago el set confile:

set confile = createObject("scripting.filesystemobject")

ma da el error de compilación:

BC30807: No se admiten instrucciones de asignación 'Let' y 'Set'.

Este código no es válido para asp.net?

RESPUESTA

Este código es de ASP 3.0. No tiene porque funcionar en ASP.NET.

www.aivan.tk

27/4/2004
He probado las funciones especificada, funcionan perfectamente. Gracias por vuestros manuales, son una joya!!

bernat

22/3/2005
Hola! Me gustaría saber si teneis info sobre cómo borrar ficheros del servidor en ASP.

Estoy con el deleteFile de FileSystemObject y me dá error de "permiso denegado"!

RESPUESTA

Mira si tienes los permisos para hacer el borrado del archivo. También consulta si esta operación está permitida, si es que estás alojando las páginas en un proveedor de hosting cuyo servidor no administres.

arioch

19/1/2007
Para corregir el error CTL_E_PERMISSIONDENIED basta con dar permisos los usuarios en el servidor. Ver permisos de IIS.

Para los demás: demasiadas dudas para contestar...
Los foros funcionan así:
creación de 1 tema,
desarrollo de ESE tema. (puede derivar a otro, en este caso el webmaster que cree otro hilo o filtre!)

punto pelota!

Cada duda en su sitio. Vamos señores que luego no encontramos nada!

Juan J

27/2/2008
Hola!

me estoy rompiendo la cabeza para paginar un fichero de texto.

Se trata de coger, por ejemplo, 50 líneas y asignar su contenido a una variable, para despues insertarlo en un html.

Las siguientes 50 líneas, podrían ir en esa misma variable definida como una matriz, y así sucesivamente.

Ya quisiera verme en este punto, para desde el html poder llamar al contenido de cada página.

Aunque llevo solo un par de dias en el empeño, no me sale, por lo que ruego a quien pueda arrojar algo de luz, me lo haga saber.

Gracias por estos estupendos espacios!

Juan J

eloi

11/3/2008
Buenas,

He usado varias veces el objecto filesystem y sin problemas pero me encuentro en un caso un poco atípico.

Me gustaria con iis cambiar un campo que tengo en la base de datos donde guardo una página web entera.y guardarlo en archivos. Para ello hago lo siguiente :

abro base de datos
i=1
do while not rs.eof
'cojo el texto de mi base de datos
texte_a_guardar=rs("guardar_factura")
'creo el objecto filesystem
Set fs=Server.CreateObject("Scripting.FileSystemObject")
'lo guardo en el stio correspondiente
nom_arxiu2="C:Inetpubwwwrootfacturas"&rs("num_facturacio")&".html"
'creo el archivo y escribo en el lo recogido en la base de datos
set fname=fs.CreateTextFile(nom_arxiu2,true)
fname.Write(texte_a_guardar)
set fs=nothing

rs.moveNext
response.write ("<br />"& i)
i=i+1
loop
cierro recordset y base de datos



///////////////////
Esto en teoria me genera un atchivo de texto con 2000 y pico numeros pero no me genera los textos que quiero. Alguien sabe por que es si tengo los permisos de leer escribir y ejectutar en mi iis y en la carpeta ?

Gracias

yomis

26/11/2009
archivo
lectura de los documentas a archivar

Fabian

28/1/2010
Lectura de archivo de texto en un servidor externo
Estimados,tengo la siguiente duda, existe algún metodo en el cual yo pueda leer desde una pagina ASP el contenido de un archivo de texto que se encuentra en un servidor externo, por ejemplo http://serverexterno/archivo.txt.
Gracias.

seba64

28/4/2011
se puede volver al principio una vez leido el fin del archivo?
Saludos.
quisiera saber si puedo leer un archivo cono ReadAll y luego volver al inicio y leerlo linea por linea con ReadLine.

gracias.

edgardo

27/2/2012
fileupload
Necesito leer 2 archivos .txt o .dat da lo mismo, pero no tendré los permisos para guardar los archivos en algúna carpeta del servidor, como los puedo leer sin guardar los archivos.????