Leer y escribir archivos de texto
Las clases StreamReader
y StreamWriter
en C# son fundamentales para leer y escribir datos en archivos de texto.
A continuación, te explico en detalle cada una de ellas junto con ejemplos de uso:
StreamReader
:
- La clase
StreamReader
se utiliza para leer caracteres desde una secuencia de bytes en una codificación determinada. - Es especialmente útil para leer archivos de texto.
- Algunos puntos clave sobre
StreamReader
:- Implementa la interfaz
TextReader
. - Se utiliza para leer líneas de información de un archivo de texto estándar.
- Se puede utilizar para leer caracteres desde otros flujos, como flujos de red o flujos de memoria.
- Se asegura de que los caracteres se decodifiquen correctamente según la codificación especificada.
- Es eficiente en términos de memoria y rendimiento.
- Se debe liberar explícitamente cuando ya no se necesita.
- Implementa la interfaz
Algunos de los métodos que proporciona son:
Peek
: Devuelve si hay un carácter o no.Read
: Lee el siguiente carácter o conjunto de caracteres del flujo de entrada.ReadAsync
: Lee un número máximo especificado de caracteres del flujo actual de forma asíncrona y escribe los datos en un búfer, comenzando en el índice especificado.ReadBlock
: Lee un número máximo especificado de caracteres del flujo actual y escribe los datos en un búfer, comenzando en el índice especificado.ReadBlockAsync
: Lee un número máximo especificado de caracteres del flujo actual de forma asíncrona y escribe los datos en un búfer, comenzando en el índice especificado.ReadLine
: Lee una línea de caracteres del flujo actual y devuelve los datos como una cadena.ReadLineAsync
: Lee una línea de caracteres de forma asíncrona desde el flujo actual y devuelve los datos como una cadena.ReadToEnd
: Lee todos los caracteres desde la posición actual hasta el final del flujo.ReadToEndAsync
: Lee todos los caracteres desde la posición actual hasta el final del flujo de forma asíncrona y los devuelve como una cadena.
Ejemplo de uso de StreamReader
:
Supongamos que tenemos un archivo de texto llamado “miArchivo.txt” con el siguiente contenido:
Hola, mundo.
Esta es otra línea.
A continuación, mostraremos cómo usar StreamReader
para leer el contenido de este archivo:
using System;
using System.IO;
class Program
{
static void Main()
{
string rutaArchivo = @"C:\miArchivo.txt";
try
{
// Crear una instancia de StreamReader para leer desde el archivo
using (StreamReader lector = new StreamReader(rutaArchivo))
{
string linea;
while ((linea = lector.ReadLine()) != null)
{
Console.WriteLine(linea);
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error al leer el archivo: {e.Message}");
}
}
}
En este ejemplo:
- Creamos una instancia de
StreamReader
para leer desde el archivo “miArchivo.txt”. - Utilizamos
ReadLine()
para leer cada línea del archivo y mostrarla por consola.
StreamWriter
:
- La clase
StreamWriter
se utiliza para escribir caracteres en una secuencia de bytes en una codificación determinada. - Es especialmente útil para escribir datos en archivos de texto.
- Algunos puntos clave sobre
StreamWriter
:- Implementa la interfaz
TextWriter
. - Se utiliza para escribir caracteres en otros flujos, como flujos de archivos, flujos de red o flujos de memoria.
- Se asegura de que los caracteres se codifiquen correctamente según la codificación especificada.
- Es eficiente en términos de memoria y rendimiento.
- Se debe liberar explícitamente cuando ya no se necesita.
- Implementa la interfaz
Algunos de los métodos que proporciona son:
Write
: Escribe un carácter o una cadena en el flujo de salida.WriteAsync
: Escribe una cadena en el flujo de salida de forma asíncrona.WriteLine
: Escribe una línea de caracteres en el flujo de salida.WriteLineAsync
: Escribe una línea de caracteres en el flujo de salida de forma asíncrona.
Ejemplo de uso de StreamWriter
:
Supongamos que queremos crear un nuevo archivo llamado “nuevoArchivo.txt” y escribir algunas líneas en él:
using System;
using System.IO;
class Program
{
static void Main()
{
string rutaNuevoArchivo = @"C:\nuevoArchivo.txt";
try
{
// Crear una instancia de StreamWriter para escribir en el archivo
using (StreamWriter escritor = new StreamWriter(rutaNuevoArchivo))
{
escritor.WriteLine("Hola, mundo.");
escritor.WriteLine("Esta es otra línea.");
}
Console.WriteLine("Archivo creado y texto escrito.");
}
catch (Exception e)
{
Console.WriteLine($"Error al escribir en el archivo: {e.Message}");
}
}
}
En este ejemplo:
- Creamos una instancia de
StreamWriter
para escribir en el archivo “nuevoArchivo.txt”. - Utilizamos
WriteLine()
para escribir dos líneas en el archivo.
Recuerda que tanto StreamReader
como StreamWriter
son útiles para trabajar con archivos de texto en C#.
using System; using System.IO;
class Program { static void Main() { string rutaArchivo = @”C:\Ruta\Archivo.bin”;
try
{
// Datos binarios que deseas escribir en el archivo
byte[] datosBinarios = { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64 };
// Crear una instancia de FileStream y BinaryWriter
using (FileStream flujoArchivo = new FileStream(rutaArchivo, FileMode.Create))
using (BinaryWriter escritorBinario = new BinaryWriter(flujoArchivo))
{
// Escribir los datos binarios en el archivo
escritorBinario.Write(datosBinarios);
}
Console.WriteLine("Datos binarios escritos exitosamente en el archivo.");
}
catch (IOException ex)
{
Console.WriteLine($"Error al escribir datos binarios en el archivo: {ex.Message}");
}
}
}
using System; using System.IO;
class Program { static void Main() { string rutaArchivo = @”C:\Ruta\Archivo.bin”;
try
{
// Crear una instancia de FileStream y BinaryReader
using (FileStream flujoArchivo = new FileStream(rutaArchivo, FileMode.Open))
using (BinaryReader lectorBinario = new BinaryReader(flujoArchivo))
{
// Obtener la longitud del archivo en bytes
long longitudArchivo = flujoArchivo.Length;
// Leer los datos binarios del archivo
byte[] datosBinarios = lectorBinario.ReadBytes((int)longitudArchivo);
// Procesar o mostrar los datos binarios según sea necesario
Console.WriteLine("Datos binarios leídos del archivo:");
Console.WriteLine(BitConverter.ToString(datosBinarios));
}
Console.WriteLine("Lectura de datos binarios exitosa.");
}
catch (IOException ex)
{
Console.WriteLine($"Error al leer datos binarios del archivo: {ex.Message}");
}
}
}
Un ejemplo para escribir y leer datos enteros y double en un archivo en modo binario:
static void Main() { int entero1 = 42; int entero2 = -15; int entero3 = 100; double double1 = 3.14; double double2 = 2.718; // Ruta del archivo string rutaArchivo = "datos.txt"; try { // Escribir los datos en el archivo using (BinaryWriter escritor = new BinaryWriter(File.OpenWrite(rutaArchivo))) { escritor.Write(entero1); escritor.Write(entero2); escritor.Write(entero3); escritor.Write(double1); escritor.Write(double2); } Console.WriteLine("Datos escritos exitosamente en el archivo."); // Leer los datos desde el archivo using (BinaryReader lector = new BinaryReader(File.OpenRead(rutaArchivo))) { // Leer enteros int leidoEntero1 = lector.ReadInt32(); int leidoEntero2 = lector.ReadInt32(); int leidoEntero3 = lector.ReadInt32(); // Leer doubles double leidoDouble1 = lector.ReadDouble(); double leidoDouble2 = lector.ReadDouble(); // Mostrar los datos leídos Console.WriteLine("Datos leídos desde el archivo:"); Console.WriteLine($"Entero1: {leidoEntero1}"); Console.WriteLine($"Entero2: {leidoEntero2}"); Console.WriteLine($"Entero3: {leidoEntero3}"); Console.WriteLine($"Double1: {leidoDouble1}"); Console.WriteLine($"Double2: {leidoDouble2}"); } } catch (IOException ex) { Console.WriteLine($"Error al manipular el archivo: {ex.Message}"); } catch (FormatException ex) { Console.WriteLine($"Error al convertir datos: {ex.Message}"); } }