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
StreamReaderse 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
StreamReaderpara leer desde el archivo “miArchivo.txt”. - Utilizamos
ReadLine()para leer cada línea del archivo y mostrarla por consola.
StreamWriter:
- La clase
StreamWriterse 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
StreamWriterpara 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}");
}
}