¿Has probado a ejecutar tu código?
Supongo que no, ya que de hecho no va a compilar porque hay alguna instrucción mal escrita:
escribir = Convert.ToByte(Console.Redline());
Pero es que además hay varios
using innecesarios, se declaran dos variables estaticas de tipo byte, que luego no se usan para nada (porque de todos modos no tienen ninguna utilidad).
Cuando se pide el nombre del fichero, se convierte a byte lo que se recoja, para guardarlo en una variable int.
Console.WriteLine("Escribe el fixero a leer: ");
fixero = Convert.ToByte(Console.ReadLine());
No tiene ningún sentido. Ahí lo que pasará que si le doy el nombre "miFichero.txt", esto obviamente es imposible convertirlo a números, ni a int ni aún menos a byte (un byte es un número entre 0 y 255).
Por lo tanto se producirá una excepción y el programa se detendrá.
Esta línea tampoco la aceptará el compilador:
void AdicionarInfoAlTxt()
¿Qué es?
Un intento de declaración de un método? ¿Sin punto y coma al final?
¿Sin llaves de apertura y cierre para definir su código?
De todos modos está dentro del método Main(), no se puede declarar/definir un método, dentro de otro método.
Y bueno, aunque nada de todo esto fallase, la lógica que sigue el código no es la adecuada de todas maneras. Primero leería las líneas, las mostraría en pantalla y cerraría fichero de lectura.
Luego intentaría escribir en el fichero copia, pero las líneas leídas no están guardadas en ningún sitio, así que no hay nada disponible para escribir.
No quiero ser demasiado crítico, pero quiero que veas que copiar retazos de código de aquí y de allá y juntarlo confiando que sirva de algo... no lleva a ninguna parte.
Es que ni siquiera has comprobado tú mismo si funciona o no.
No copies/uses código que no entiendes. Tienes que conseguir escribir tu propio código, aunque luego no funcione o no cumpla con todo lo que pide el enunciado.
Y antes de escribir código, tienes que tener clara la lógica que quieres seguir.
La lógica a seguir ya te la dije en el mensaje anterior:
Tienes que pedir dos nombres de archivo al usuario: nombre de archivo a leer y nombre de archivo donde guardar una copia del primero.
Entonces hay que leer el primer archivo y escribir las mismas líneas en el otro.
Si hubieras hecho un programa donde, al menos, pidiese los dos nombres de archivo y los guardase en el tipo de dato adecuado (String, no un byte o int), ya tendría mucho más mérito que la amalgama de código anterior.
Sigamos la lógica:
- Pedir nombre de archivo a leer. Si es un nombre lo que pedimos, es decir, una cadena de texto pues se recoge en un String.
Luego, usando ese String, podemos inicalizar un objeto StreamReader que será quien luego leerá líneas de ese fichero:
static void Main(string[] args)
{
Console.Write("Fichero a leer: ");
String origen = Console.ReadLine();
System.IO.StreamReader ficheroOrigen = new System.IO.StreamReader(origen);
}
Continuamos:
-Pedir nombre de archivo donde escribir. Es decir, el fichero donde haremos una copia del anterior. El proceso es el mismo, solo que esta vez inicializaremos un objeto StreamWriter, que será quién escriba.
static void Main(string[] args)
{
Console.Write("Fichero a leer: ");
String origen = Console.ReadLine();
System.IO.StreamReader ficheroOrigen = new System.IO.StreamReader(origen);
Console.Write("Fichero donde hacer copia: ");
String copia = Console.ReadLine();
System.IO.StreamWriter ficheroCopia = new System.IO.StreamWriter(copia);
}
Siguiente paso:
Leer el primer archivo y escribir las mismas líneas en el otro.Lo que haremos será leer línea a línea, tal y como hicimos en el primer ejercicio.
Por cada línea leída, la mostramos en pantalla. Pero además, tenemos que pedirle al StreamWriter que la escriba en el fichero "copia".
Porque esas líneas no se guardan en ningún sitio, cada vez que leemos una, la línea anterior se pierde.
Así que al mismo tiempo que leemos y mostramos en pantalla, también se la entregamos al StreamWriter.
Cuando el bucle que lee las líneas termina, hay que cerrar ambos Streamers, tanto el de lectura como el de escritura.
Especialmente el de escritura, si no lo cerramos, las líneas "escritas" no se transferirán al fichero de texto, así que no habremos conseguido nada.
Dejo el código final al completo. Para mostrar las líneas en pantalla de una forma más destacada, cambia el color del texto a amarillo. Pero esto ya son adornos estéticos, no es lo importante.
using System;
namespace CopiarFichero
{
class Program
{
static void Main(string[] args)
{
Console.Write("Fichero a leer: ");
String origen = Console.ReadLine();
System.IO.StreamReader ficheroOrigen = new System.IO.StreamReader(origen);
Console.Write("Fichero donde hacer copia: ");
String copia = Console.ReadLine();
System.IO.StreamWriter ficheroCopia = new System.IO.StreamWriter(copia);
Console.WriteLine("\n\n\t\tIniciando la copia linea a linea...");
String linea;
while ((linea = ficheroOrigen.ReadLine()) != null)
{
//Mostramos la linea actual en pantalla
Console.WriteLine("Copiando linea:");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(linea);
Console.ResetColor();
//Escribimos la linea en el archivo copia
ficheroCopia.WriteLine(linea);
}
ficheroOrigen.Close();
ficheroCopia.Close();
Console.WriteLine("\n\n\t\tCopia finalizada");
}
}
}
A continuación pongo el resultado obtenido en pantalla.
Fíjate que cuando se piden los nombres de archivos, hay que dar una ruta completa.
Se podría dar una ruta relativa..., pero puede ser más difícil acertar con la ruta correcta, ya que dependerá de donde se ejecuta el archivo .exe del programa.
Así que mejor dar una ruta completa, de un archivo de texto que tengamos en la raíz del disco, para no tener que indicar demasiadas carpetas en la ruta.
El archivo a leer tiene que existir.
El archivo a copiar, no hace falta que exista, el programa lo creará automáticamente.
![](https://i.ibb.co/gRqsz8y/imagen-2021-05-26-004620.png)
Y obviamente no solo se ven las líneas en pantalla.
El fichero copiado aparecerá en la ruta que hayamos indicado.
Repasa el código que he puesto y comprueba que entiendes cada línea, que significa cada instrucción, por qué las estamos usando, cuál es la lógica que se ha seguido...
Lo que no entiendas, no dudes en preguntar.
Luego veremos el tercer ejercicio.
Saludos.