Antes de empezar
Para realizar estos ejercicios, deberás descargar los recursos del enlace de proyecto_poo. Como puedes ver, la solución está compuesta de varios proyectos. Cada uno de ellos corresponde con un ejercicio, deberás implementar todo el código, tanto de la Main como de los métodos que se piden en cada ejercicio. Cada proyecto contiene el test correspondiente, que deberás pasar para comprobar que has hecho el ejercicio correctamente.
Vamos a practicar el uso de la clase estática Path para manipular cadenas de texto que representan rutas, sin necesidad de tocar el disco físico.
Ejercicio 1. Jugando con Rutas Introduce nombre de archivo: archivo1.txt Introduce nombre de carpeta: carpeta1 Ruta combinada: carpeta1\Documentos\archivo1.txt Extensión: .txt Nombre sin extensión: archivo1 Ruta con extensión cambiada: carpeta1\Documentos\archivo1.bak Nombre aleatorio generado: h2ydt234.gsr Pulsa una tecla para finalizar...
Requisitos:
Crea un programa que solicite al usuario el nombre de un archivo (con extensión) y el nombre de una carpeta. Utiliza la clase Path para realizar las siguientes operaciones y mostrar los resultados por consola:
carpeta\Documentos\archivo.txt)..bak y muestra la nueva ruta resultante.Path.Vamos a utilizar las clases estáticas Directory y File para manipular el sistema de archivos real.
Ejercicio 2. Gestión de Archivos y Directorios Carpeta Laboratorio creada. Subcarpetas Originales y Copias creadas. Fichero mensaje.txt creado en Originales. Fichero copiado a Copias como mensaje_copia.txt. Fichero original movido a raiz Laboratorio como mensaje_movido.txt. Archivos en Copias: mensaje_copia.txt Archivos en Laboratorio: mensaje_movido.txt ¿Quieres borrar todo? (S/N) s Carpeta Laboratorio y contenido eliminados. Pulsa una tecla para finalizar...
Requisitos:
Crea un programa que realice la siguiente secuencia de acciones controlada. Muestra mensajes por consola tras cada paso.
File.WriteAllText, crea un fichero mensaje.txt dentro de "Originales" con el contenido: "Este es el contenido original.".mensaje.txt a la carpeta "Copias" con el nombre mensaje_copia.txt.mensaje.txt a la carpeta raíz "Laboratorio" cambiándole el nombre a mensaje_movido.txt.Para entender cómo funcionan los flujos de bajo nivel, vamos a copiar un fichero usándo directamente FileStream.
Ejercicio 3. Copia de Ficheros Byte a Byte Fichero datos_origen.dat creado con 100 bytes aleatorios. Copia finalizada. Verificación exitosa: datos_destino.dat existe y tiene el mismo tamaño (100 bytes). Pulsa una tecla para finalizar...
Requisitos:
GeneraFicheroOrigen al que le llega el nombre del fichero, genera programáticamente un fichero y escribe en él 100 bytes con valores aleatorios (puedes usar un array de bytes y File.WriteAllBytes para prepararlo).CopiaFichero que:
FileStream de lectura sobre el origen.FileStream de escritura sobre el destino.ReadByte()) y lo escriba en el destino (usando WriteByte()) hasta llegar al final del stream.VerificaCopia al que le llegan los nombres de ficheros origen y destino y se encarga de Verificar que el fichero destino existe y tiene el mismo tamaño que el origen.Tip
Recuerda usar bloques using para asegurar que los streams se cierran y liberan los recursos correctamente.
Vamos a diferenciar entre guardar datos en formato binario (propio de la aplicación) y formato texto (intercambiable). Fíjate en la llamada a los métodos, para crear estos y definir el código que corresponde a cada uno.
Ejercicio 4. Gestión de Inventario Datos guardados en inventario.bin (Binario). Leyendo datos desde binario: Producto: Manzana, Precio: 0,5, Stock: 100 Producto: Pan, Precio: 1,2, Stock: 50 Producto: Leche, Precio: 0,9, Stock: 30 Producto: Huevos, Precio: 2,5, Stock: 20 Datos exportados a inventario.csv (CSV). Pulsa una tecla para finalizar...
Requisitos:
Crea una clase simple Producto con las propiedades: string Nombre, double Precio, int Stock.
Crea una lista con 3 o 4 productos de ejemplo.
Parte A - Binario:
BinaryWriter para guardar la lista de productos en un fichero inventario.bin. Deberás iterar la lista y escribir cada propiedad (string, double, int) en orden.BinaryReader para leer inventario.bin, reconstruir la lista de productos y mostrarlos por consola.Parte B - Texto (CSV):
inventario.csv. Recorre la misma lista y escribe cada producto en una línea siguiendo el formato estándar CSV: Nombre;Precio;Stock.StreamWriter para esto.inventario.bin.Vamos a crear un pequeño sistema de logs o diario personal.
Ejercicio 5. Diario con StreamWriter y StreamReader Escribe una entrada (FIN para salir): Hoy he aprendido C# Entrada guardada. Escribe una entrada (FIN para salir): FIN --- LEYENDO DIARIO --- 1. 08/01/2026 10:00:00 - Ayer empecé con ficheros 2. 08/01/2026 10:05:23 - Hoy he aprendido C#
Requisitos:
StreamWriter con la opción append: true para añadir esa frase al final de un fichero diario.txt.
StreamReader para abrir diario.txt.Sistema de procesamiento de archivos y control de excepciones.
Ejercicio 6. Procesamiento de Archivos y Conteo de Palabras Introduce la ruta del archivo: datos.txt El archivo tiene 120 palabras. Introduce la ruta del archivo: archivo_inexistente.txt Error al leer el archivo: No se pudo leer el archivo. Causa original: El archivo especificado no se encontró. Introduce la ruta del archivo: datos.pdf Error: Solo se permiten archivos de texto (.txt). Introduce la ruta del archivo: Error: La ruta no puede estar vacía.
Requisitos:
Crea un sistema con las siguientes clases:
Excepción personalizada
ArchivoLecturaException (hereda de Exception). Su constructor debe aceptar un mensaje y una excepción interna.Clase GestorArchivos
LeerArchivo(string ruta):
ArgumentException..txt, lanza un NotSupportedException. Usa expresiones regulares para validar la extensión.File.ReadAllText.
FileNotFoundException y lanza un ArchivoLecturaException con la excepción original como inner exception.IOException), lanza también un ArchivoLecturaException encadenando la excepción original.Clase ProcesadorTexto
ContarPalabras(string texto):
ArgumentException.En el método Main:
GestorArchivos.LeerArchivo para leer el contenido.ProcesadorTexto.ContarPalabras para contar las palabras.ArchivoLecturaException, muestra el mensaje y el mensaje de la excepción interna.