Debe escribir todas las líneas que lee en el archivo de salida, incluso si no las cambia.
Algo como:
using (var input = File.OpenText("input.txt"))
using (var output = new StreamWriter("output.txt")) {
string line;
while (null != (line = input.ReadLine())) {
// optionally modify line.
output.WriteLine(line);
}
}
Si desea realizar esta operación en su lugar, la forma más fácil es utilizar un archivo de salida temporal y, al final, reemplazar el archivo de entrada con la salida.
File.Delete("input.txt");
File.Move("output.txt", "input.txt");
(Intentar realizar operaciones de actualización en el medio del archivo de texto es bastante difícil de hacer porque siempre es difícil tener el reemplazo de la misma longitud, dado que la mayoría de las codificaciones son de ancho variable).
EDITAR: en lugar de dos operaciones de archivo para reemplazar el archivo original, mejor usar File.Replace("input.txt", "output.txt", null)
. (Ver MSDN ).