martes, 12 de julio de 2011

Leer un archivo de texto mediante System.IO y Visual C# .NET

Leer archivos de texto en Visual C# .NET

La apertura y lectura de archivos para el acceso de lectura es una parte importante de la funcionalidad de entrada y salida (ES), incluso si no necesita escribir en el archivo en cuestión. En este ejemplo se abre un archivo para su lectura, lo que resulta útil para leer archivos de texto, pero que es inapropiado en el caso de archivos binarios. En este ejemplo se utiliza uno de los varios métodos disponibles para abrir el archivo. Aunque muchas de las estructuras de datos están disponibles para almacenar información que se recupera del archivo, la clase ArrayList es la estructura más fácil de utilizar. Para abrir y leer el archivo, en este ejemplo se utilizan objetos del espacio de nombres System.IO, en concreto la clase System.IO.StreamReader.

NOTA: en este ejemplo se requiere una forma determinada de archivo de texto (.txt) desde la que leer.

Para cargar y leer un archivo de texto desde Visual C# .NET, siga estos pasos:
  1. Abra Visual Studio .NET. Cree una nueva aplicación de consola en C#. Visual Studio crea una Clase estática y un procedimiento Main() vacío.
  2. Asegúrese de que el proyecto hace referencia al menos al espacio de nombres System. Utilice la instrucción using en los espacios de nombres System, System.IO y System.Collections de forma que no tenga que calificar las declaraciones de esos espacios de nombres más adelante en el código. Debe utilizar estas instrucciones antes que cualquier otra declaración.
    using System;
    using System.IO;
    using System.Collections;
  3. Para abrir un archivo y leerlo, cree una nueva instancia de un objeto StreamReader y pase la ruta del archivo en el constructor de la siguiente manera:
    StreamReader objReader = new StreamReader("c:\\test.txt");
  4. Necesitará una variable de cadena en la que almacenar cada una de las líneas del archivo a medida que avanza en el proceso. Puesto que agregará estas líneas a un objeto ArrayList, debe declarar y crear un objeto de este tipo también.
    string sLine="";
    ArrayList arrText = new ArrayList();
  5. Existen varios métodos para leer el archivo, incluido el método ReadToEnd que lee todo el archivo de una vez. Sin embargo, para este ejemplo, puede utilizar el método ReadLine para que las líneas del archivo se muestren de una en una. Al llegar al final del archivo, este método devuelve un valor nulo, lo que permite terminar el bucle. Mientras lee cada línea del archivo, puede utilizar el método Add de ArrayList para insertar las líneas en la clase ArrayList.
    while (sLine != null)
    {
     sLine = objReader.ReadLine();
     if (sLine != null)
      arrText.Add(sLine);
    }
    objReader.Close();
  6. Utilice un bucle For Each para escribir el contenido del objeto ArrayList recién relleno en la consola de la siguiente manera:
    foreach (string sOutput in arrText)
     Console.WriteLine(sOutput);
    Console.ReadLine();
  7. Guarde y ejecute el código, que genera un listado del archivo en la consola.
 

Lista completa de código

using System;
using System.IO;
using System.Collections;

namespace TextFileReader_csharp
{
 /// <summary>
 /// Descripción de resumen para Class1.
 /// </summary>
 class Class1
 {
  static void Main(string[] args)
  {
   StreamReader objReader = new StreamReader("c:\\test.txt");
   string sLine="";
   ArrayList arrText = new ArrayList();

   while (sLine != null)
   {
    sLine = objReader.ReadLine();
    if (sLine != null)
     arrText.Add(sLine);
   }
                        objReader.Close();

   foreach (string sOutput in arrText)
    Console.WriteLine(sOutput);
   Console.ReadLine();
  }
 }
}
 

Errores

Debe prestar atención a varios elementos a la hora de trabajar con la E/S de archivos, entre ellos los siguientes:
  • Cada vez que tenga acceso a un archivo, existe la posibilidad de que el archivo que está intentando leer o en el que intenta escribir no se encuentre en el sistema o esté en uso.
  • En este ejemplo se inserta todo el archivo en la memoria antes de que ésta lo procese. Puede encontrarse con una situación en la que el archivo sea demasiado grande para guardarlo en memoria, o puede que no tenga permisos para obtener acceso al archivo.
Cualquiera de estas situaciones puede hacer que se provoque una excepción. Siempre es conveniente proporcionar un bucle try...catch para tratar estos problemas frecuentes.

No hay comentarios:

Publicar un comentario