De entrada te marco dos errores, uno de algorítmo y otro de desconocimiento del lenguaje.
El de algoritmo es este:
Código:
linea = Console.ReadLine();
do
{
linea = Console.ReadLine();
fichero.WriteLine(linea);
}
while (linea == null) ;
El primer texto que capturas antes de entrar en el bucle lo estas descartando ya que en cuanto entras en el "do", vuelves a leer del teclado. Una vez veas claro el fallo que te comento, mira de replantearte esas lineas de código para ver como solucionarlo.
El segundo error es, en mi criterio, de desconocimiento del lenguaje. Estas asumiendo que si alguien no introduce nada, linea será null. Si miras la documentación de
ReadLine, solo devolverá "null" al pulsar desde el teclado "Control + Z". Si alguien pulsa únicamente return, lo que te devuelve es una cadena vacía. Para poder controlar si la cadena está vacía (ha pulsado return sin escribir nada) o si ha enviado un "Control + Z" y te está devolviendo null, la clase String dispone de la función
IsNullOrEmpty.
Prueba de entrada con estos cambios a ver que tal ;)