2010-07-19 19 views
5

Tengo una aplicación de consola muy simple que crea un archivo de texto. A continuación se muestra un resumen del código:¿StreamWriter está escribiendo retornos de carro?

StreamWriter writer = File.CreateText("c:\\temp.txt"); 
foreach (blah...) 
{ 
    writer.Write(body.ToString() + "\n"); 
    writer.Flush(); 
} 
writer.Close(); 

El cliente declara que hay retornos de carro al final de cada línea. ¿De dónde provienen estos retornos de carro?

Actualización: Después de abrir en VS editor binario y Notepad ++, no hubo ocurrencias de 0d 0a. Voy a volver con el cliente.

+2

¿Qué están usando para leer los archivos? – ChrisF

+5

Usted dice "el cliente está reclamando ..." ¿Se ha registrado usted mismo? –

+0

Dan, ¿cuál es una buena utilidad para ver estos caracteres especiales? –

Respuesta

3

Abra el archivo en el editor binario de Visual Studio (Archivo.Abrir.Archivo, haga clic en la flecha hacia abajo en el botón Abrir, elija Abrir con ... y elija Editor binario), y busque 0D bytes. Si no hay ninguno presente, entonces:

  • su cliente no puede decir la diferencia entre la línea de alimentación y un retorno de carro,

  • su método de transmisión está modificando el archivo en ruta. ¿Hay alguna discrepancia binaria/ascii FTP pasando?

Si hay son0D bytes, entonces ellos están presentes en la variable de body.

+2

O el cliente está abriendo el archivo con una herramienta/función que reemplaza automáticamente \ n con \ r \ n. Muchos editores de texto de Windows lo hacen. –

+0

Esto es bueno. Encontré la ocurrencia de 0d 0a entre líneas cuando se abre en el editor binario VS pero no con Notepad ++. ¿Entonces debe existir en la variable del cuerpo? Actualizaré mi publicación original con el código. –

+0

FYI, el cliente no sabía de qué estaban hablando porque el archivo no tenía ningún retorno de carro. –

1

El "\n" al final de cada write llamada

EDIT: Sé que esto es una línea nueva, no un retorno de carro pero apuesto cualquier dinero que el cliente se está confundido entre los dos y es en realidad este que está causando el problema

+6

Eso es un avance de línea, no un retorno de carro. – BoltClock

+4

'\ n' es un salto de línea. '\ r' es el retorno de carro. – ChrisF

+0

@BoltClock, @ChrisF - Lo sé, pero a menos que haya un retorno de carraige en el extremo del cuerpo, esto será lo que el cliente se queja sobre – w69rdy

1

En su código, coloca un avance de línea (\ n).

Su cliente está hablando de un retorno de carro (\ r). ¿Tal vez su cliente está tomando un avance de línea por un retorno de carro?

0

¿El cliente distingue entre un CR y un LF? ¿Es necesario el color()? ¿Estás sobrecargando el buffer si no lo haces?

A menos que tenga una gran cantidad de texto, puede encontrar más uso creando un StringBuilder para formatear el texto exactamente como lo quiere con \ n, \ r, \ t o lo que sea y luego transfiéralo directamente a un StreamWriter .

0

Si el primer carácter de la cadena body era '\ r', eso explicaría lo que está viendo.

0

¿Ha comprobado si body también está terminando con caracteres que no desea imprimir? Esta es la otra fuente de problema potencial.

Cuestiones relacionadas