Introducción: ¿por qué es necesario trabajar con el sistema de archivos en C#?
\nCualquier aplicación seria, tarde o temprano, se enfrenta a la necesidad de guardar datos. Ya sean archivos de configuración, registros, documentos de usuario o datos temporales, trabajar con el sistema de archivos es una habilidad fundamental para un desarrollador de C#. En este artículo, analizaremos con ejemplos prácticos cómo crear, leer, escribir y gestionar archivos y carpetas usando .NET. Aprenderá no solo las operaciones básicas, sino también las mejores prácticas para el manejo de excepciones y el trabajo con flujos.
\n\nClases principales para trabajar con el sistema de archivos
\nEn .NET, para interactuar con el sistema de archivos se utilizan los espacios de nombres System.IO y System.IO.Enumeration. Las clases clave que necesitará son:
- \n
File— métodos estáticos para crear, copiar, eliminar y mover archivos. \n FileInfo— clase de instancia para trabajar con un archivo específico (admite las mismas operaciones, pero requiere crear un objeto). \n Directory— métodos estáticos para trabajar con directorios. \n DirectoryInfo— clase de instancia para trabajar con directorios. \n Path— clase de utilidad para trabajar con rutas (combinación, obtención de extensión, nombre, etc.). \n FileStream— flujo de bajo nivel para leer/escribir bytes. \n StreamReader/StreamWriter— envoltorios de alto nivel para trabajar con texto. \n
La elección entre métodos estáticos y clases de instancia depende del escenario. Si necesita realizar una sola operación, use File o Directory. Si planea varias operaciones sobre un mismo objeto, cree un FileInfo o DirectoryInfo.
Creación, lectura y escritura de archivos
\n\n1. Creación y escritura de un archivo de texto
\nLa forma más sencilla de escribir texto en un archivo es usar el método File.WriteAllText. Crea el archivo (o sobrescribe uno existente) y cierra el flujo automáticamente.
using System.IO;\n\nstring path = @"C:\\temp\\example.txt";\nstring content = "¡Hola, mundo! Este es un archivo de prueba.";\n\nFile.WriteAllText(path, content);\nConsole.WriteLine("Archivo creado y escrito.");\nSi necesita agregar datos al final del archivo, use File.AppendAllText:
File.AppendAllText(path, "\\nLínea agregada.");\n\n2. Lectura de un archivo
\nPara leer todo el texto, use File.ReadAllText:
string readContent = File.ReadAllText(path);\nConsole.WriteLine(readContent);\nSi el archivo es grande, es mejor leerlo línea por línea con File.ReadLines (devuelve IEnumerable<string>):
foreach (string line in File.ReadLines(path))\n{\n Console.WriteLine(line);\n}\n\n3. Trabajo con archivos binarios
\nPara datos binarios (imágenes, archivos comprimidos), use FileStream o BinaryReader/BinaryWriter. Ejemplo de escritura de un arreglo de bytes:
byte[] data = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"\nFile.WriteAllBytes(@"C:\\temp\\binary.dat", data);\n\nbyte[] readData = File.ReadAllBytes(@"C:\\temp\\binary.dat");\nConsole.WriteLine(BitConverter.ToString(readData)); // 48-65-6C-6C-6F\n\nTrabajo con carpetas y gestión de archivos
\n\n1. Creación y eliminación de carpetas
\nPuede crear una carpeta con Directory.CreateDirectory. El método crea todas las carpetas faltantes en la ruta:
string dirPath = @"C:\\temp\\MyApp\\Logs";\nDirectory.CreateDirectory(dirPath);\nConsole.WriteLine("Carpeta creada.");\nEliminación de una carpeta (recursiva, con todo su contenido):
\nif (Directory.Exists(dirPath))\n{\n Directory.Delete(dirPath, true);\n Console.WriteLine("Carpeta eliminada.");\n}\n\n2. Copiar y mover archivos
\nPara copiar un archivo, use File.Copy. El tercer parámetro indica si se debe sobrescribir el archivo de destino si ya existe:
string sourceFile = @"C:\\temp\\example.txt";\nstring destFile = @"C:\\temp\\backup\\example.txt";\n\nDirectory.CreateDirectory(Path.GetDirectoryName(destFile));\nFile.Copy(sourceFile, destFile, overwrite: true);\nConsole.WriteLine("Archivo copiado.");\nPara mover un archivo, use File.Move:
string movedFile = @"C:\\temp\\archive\\example.txt";\nDirectory.CreateDirectory(Path.GetDirectoryName(movedFile));\nFile.Move(sourceFile, movedFile);\nConsole.WriteLine("Archivo movido.");\n\nManejo de excepciones al trabajar con el sistema de archivos
\nLas operaciones con archivos pueden generar excepciones. Las más comunes son:
\n- \n
DirectoryNotFoundException— la ruta del directorio no existe. \n FileNotFoundException— el archivo no se encuentra. \n UnauthorizedAccessException— no hay permisos de acceso. \n IOException— error general de E/S (por ejemplo, el archivo está en uso). \n PathTooLongException— la ruta excede la longitud máxima del sistema. \n
Siempre use bloques try-catch al trabajar con el sistema de archivos:
try\n{\n string content = File.ReadAllText(@"C:\\temp\\important.txt");\n Console.WriteLine(content);\n}\ncatch (FileNotFoundException)\n{\n Console.WriteLine("El archivo no fue encontrado.");\n}\ncatch (UnauthorizedAccessException)\n{\n Console.WriteLine("No hay permisos para leer el archivo.");\n}\ncatch (Exception ex)\n{\n Console.WriteLine($"Error inesperado: {ex.Message}");\n}\n\nConclusión
\nHemos cubierto los aspectos básicos del trabajo con el sistema de archivos en C#. Ahora sabe cómo crear, leer, escribir, copiar, mover y eliminar archivos y carpetas, así como manejar excepciones. Practique con ejemplos reales y no olvide usar las clases FileInfo, DirectoryInfo y Path para un código más limpio y eficiente. ¡Buena suerte en su aprendizaje!