U7.5 · Ficheros con Path, bytes y bloques¶
Ejercicios de 7.E: las clases Path, File y Directory, los ficheros binarios y la lectura y escritura por bloques. Todos controlan los errores con try/catch y cierran los archivos con using. Para leer del teclado usa siempre Console.ReadLine() (y Trim() si es un nombre o una opción).
Ejercicio 7.16¶
Gestor de archivos. Haz un menú: 1 crear carpeta, 2 crear archivo vacío, 3 ver información (ruta absoluta, nombre, carpeta padre, si es archivo o carpeta y tamaño), 4 copiar, 5 mover o renombrar, 6 borrar y 7 salir. Cada opción pide los nombres que necesite. Controla los errores con try/catch y muestra un mensaje distinto para «ya existe» (lanza tú una excepción propia que herede de IOException, porque C# no tiene una), FileNotFoundException o DirectoryNotFoundException, «carpeta no vacía» (otra excepción propia), UnauthorizedAccessException, y uno general para el resto de IOException.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
string Pedir(string texto)
{
Console.Write(texto);
return (Console.ReadLine() ?? "").Trim();
}
// ... (resto de la solución bloqueado)Ejercicio 7.17¶
Fichero binario de caracteres. Menú: 1 crear, 2 mostrar y 3 salir. Al crear, pide el nombre del fichero (si existe, pregunta si se crea de nuevo) y después datos hasta que se escriba fin; de cada dato se guarda en el fichero, como un byte, el código de su primer carácter. Si el código es mayor que 255 (como el de €), avisa de que no cabe en un byte y no lo guardes. Al mostrar, lee el fichero byte a byte y escribe, por cada uno, su número y su carácter.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
string Pedir(string texto)
{
Console.Write(texto);
return (Console.ReadLine() ?? "").Trim();
}
// ... (resto de la solución bloqueado)Ejercicio 7.18¶
Copiar un binario por bloques. Pide el nombre de un fichero origen y uno destino y cópialo leyendo y escribiendo bloques de 4096 bytes (sin File.Copy ni File.ReadAllBytes). Muestra cuántos bloques se han copiado y cuántos bytes en total, y comprueba que origen y destino pesan lo mismo.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Console.Write("Origen: ");
string origen = (Console.ReadLine() ?? "").Trim();
Console.Write("Destino: ");
string destino = (Console.ReadLine() ?? "").Trim();
try
// ... (resto de la solución bloqueado)Ejercicio 7.19¶
Escribir un texto por bloques. Pide un texto y un tamaño de bloque. Convierte el texto en un char[] y escríbelo en un fichero por bloques de ese tamaño, con Write(caracteres, inicio, longitud). Muestra cuántas escrituras han hecho falta y el contenido final del fichero.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Console.Write("Texto: ");
string texto = Console.ReadLine() ?? "";
Console.Write("Tamaño de bloque: ");
if (!int.TryParse(Console.ReadLine(), out int tamano) || tamano <= 0)
{
// ... (resto de la solución bloqueado)Ejercicio 7.20¶
Contar leyendo por bloques. Pide el nombre de un fichero de texto y léelo en bloques de 16 caracteres. Muestra cuántos bloques se han leído, cuántas vocales y cuántas líneas tiene. Cuida el último bloque, que casi nunca está completo.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Console.Write("Fichero: ");
string nombre = (Console.ReadLine() ?? "").Trim();
try
{
char[] buffer = new char[16];
// ... (resto de la solución bloqueado)Ejercicio 7.21¶
Caracteres y bytes. Pide un texto, guárdalo en un fichero en UTF-8 y muestra cuántos caracteres tiene (Length y EnumerateRunes().Count()) y cuántos bytes ocupa en el disco. Pruébalo con hola y con Año 5 € y explica por qué en el segundo caso los números no coinciden.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
Console.Write("Texto: ");
string texto = Console.ReadLine() ?? "";
try
{
File.WriteAllText("texto.txt", texto); // UTF-8 sin BOM
// ... (resto de la solución bloqueado)