Trabajo con el sistema de archivos en C#: ejemplos prácticos y consejos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué es necesario trabajar con el sistema de archivos en C#?

\n

Cualquier 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\n

Clases principales para trabajar con el sistema de archivos

\n

En .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
    \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
\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.

\n\n

Creación, lectura y escritura de archivos

\n\n

1. Creación y escritura de un archivo de texto

\n

La 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.

\n
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.");
\n

Si necesita agregar datos al final del archivo, use File.AppendAllText:

\n
File.AppendAllText(path, "\\nLínea agregada.");
\n\n

2. Lectura de un archivo

\n

Para leer todo el texto, use File.ReadAllText:

\n
string readContent = File.ReadAllText(path);\nConsole.WriteLine(readContent);
\n

Si el archivo es grande, es mejor leerlo línea por línea con File.ReadLines (devuelve IEnumerable<string>):

\n
foreach (string line in File.ReadLines(path))\n{\n    Console.WriteLine(line);\n}
\n\n

3. Trabajo con archivos binarios

\n

Para datos binarios (imágenes, archivos comprimidos), use FileStream o BinaryReader/BinaryWriter. Ejemplo de escritura de un arreglo de bytes:

\n
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\n

Trabajo con carpetas y gestión de archivos

\n\n

1. Creación y eliminación de carpetas

\n

Puede crear una carpeta con Directory.CreateDirectory. El método crea todas las carpetas faltantes en la ruta:

\n
string dirPath = @"C:\\temp\\MyApp\\Logs";\nDirectory.CreateDirectory(dirPath);\nConsole.WriteLine("Carpeta creada.");
\n

Eliminación de una carpeta (recursiva, con todo su contenido):

\n
if (Directory.Exists(dirPath))\n{\n    Directory.Delete(dirPath, true);\n    Console.WriteLine("Carpeta eliminada.");\n}
\n\n

2. Copiar y mover archivos

\n

Para copiar un archivo, use File.Copy. El tercer parámetro indica si se debe sobrescribir el archivo de destino si ya existe:

\n
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.");
\n

Para mover un archivo, use File.Move:

\n
string movedFile = @"C:\\temp\\archive\\example.txt";\nDirectory.CreateDirectory(Path.GetDirectoryName(movedFile));\nFile.Move(sourceFile, movedFile);\nConsole.WriteLine("Archivo movido.");
\n\n

Manejo de excepciones al trabajar con el sistema de archivos

\n

Las 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
\n

Siempre use bloques try-catch al trabajar con el sistema de archivos:

\n
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\n

Conclusión

\n

Hemos 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!

Blogs

Book Recommendations