Trabajo con el sistema de archivos en C#: desde lo básico hasta técnicas avanzadas
Trabajar con el sistema de archivos es una de las tareas clave al desarrollar aplicaciones en C#. Ya sea guardar datos de usuario, leer archivos de configuración o procesar registros, la capacidad de interactuar eficazmente con archivos y directorios es necesaria para todo desarrollador .NET. En este artículo analizaremos las clases principales del espacio de nombres System.IO, aprenderemos a crear, leer y modificar archivos, y también veremos las mejores prácticas para el manejo de errores.
1. Clases principales para trabajar con el sistema de archivos
En .NET, se proporcionan varias clases clave para trabajar con archivos y directorios. Veámoslas en detalle.
Clase File y FileInfo
File es una clase estática que proporciona métodos para crear, copiar, eliminar y mover archivos. FileInfo es una clase de instancia que permite trabajar con un archivo específico.
using System.IO;
// Uso de la clase estática Filestring path = @"C:\\Temp\\test.txt";if (File.Exists(path)){ string content = File.ReadAllText(path); Console.WriteLine(content);}
// Uso de FileInfoFileInfo fileInfo = new FileInfo(path);if (fileInfo.Exists){ Console.WriteLine($"Tamaño del archivo: {fileInfo.Length} bytes"); Console.WriteLine($"Fecha de creación: {fileInfo.CreationTime}");}Clase Directory y DirectoryInfo
De manera similar, Directory es una clase estática para operaciones con directorios, y DirectoryInfo para trabajar con una carpeta específica.
string dirPath = @"C:\\Temp\\MyFolder";
// Creación de directorioDirectory.CreateDirectory(dirPath);
// Obtención de información del directorioDirectoryInfo dirInfo = new DirectoryInfo(dirPath);if (dirInfo.Exists){ Console.WriteLine($"Subdirectorios: {dirInfo.GetDirectories().Length}"); Console.WriteLine($"Archivos: {dirInfo.GetFiles().Length}");}Clase Path
Path es una clase utilitaria para trabajar con rutas. Ayuda a combinar rutas, extraer extensiones y nombres de archivos.
string fullPath = @"C:\\Temp\\myfile.txt";string fileName = Path.GetFileName(fullPath); // myfile.txtstring extension = Path.GetExtension(fullPath); // .txtstring directory = Path.GetDirectoryName(fullPath); // C:\\Tempstring combined = Path.Combine(@"C:\\Temp", "newfile.txt"); // C:\\Tempewfile.txt2. Lectura y escritura de archivos
En C# existen varias formas de leer y escribir archivos. La elección depende del tamaño de los datos y el rendimiento requerido.
Lectura de archivos de texto
Para archivos pequeños, es conveniente usar métodos de una sola línea:
// Lectura de todo el archivo en una líneastring text = File.ReadAllText("data.txt");
// Lectura de todas las líneas en un arraystring[] lines = File.ReadAllLines("data.txt");
// Lectura con StreamReader (para archivos grandes)using (StreamReader reader = new StreamReader("largefile.txt")){ string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); }}Escritura en archivos
// Escritura de una cadenaFile.WriteAllText("output.txt", "Hello, World!");
// Escritura de un array de cadenasstring[] lines = { "Primera línea", "Segunda línea" };File.WriteAllLines("output.txt", lines);
// Añadir al final del archivoFile.AppendAllText("log.txt", $"{DateTime.Now}: Nueva entrada");
// Escritura con StreamWriterusing (StreamWriter writer = new StreamWriter("data.txt", append: true)){ writer.WriteLine("Nueva línea");}Trabajo con archivos binarios
Para datos binarios, use FileStream y BinaryReader/BinaryWriter:
// Escritura de datos binariosusing (BinaryWriter writer = new BinaryWriter(File.Open("data.bin"
```