2010-07-19 22 views
5

Ho un'applicazione console molto semplice che crea un file di testo. Di seguito è riportato un riepilogo del codice:StreamWriter sta scrivendo i ritorni a capo?

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

Il client dichiara che esistono ritorni a capo alla fine di ogni riga. Da dove vengono questi ritorni a carro?

Aggiornamento: Dopo l'apertura nell'editor binario VS e nel blocco note ++, non si sono verificati eventi 0d 0a. Ho intenzione di tornare al cliente.

+2

Che cosa stanno usando per leggere i file per verificare questo? – ChrisF

+5

Dici "il cliente sta rivendicando ..." Hai controllato te stesso? –

+0

Dan, qual è una buona utilità per visualizzare questi caratteri speciali? –

risposta

3

Aprire il file nell'editor binario di Visual Studio (File.Open.File, fare clic sulla freccia verso il basso sul pulsante Apri, scegliere Apri con ... e scegliere Editor binario) e cercare i byte 0D. Se nessuno è presente, allora:

  • il vostro cliente non può dire la differenza tra una nuova riga e un ritorno a capo,

  • il tuo metodo di trasmissione sta modificando il file in rotta. C'è qualche disallineamento tra binario e ascii nell'FTP?

Se ci sono 0D byte, quindi sono presenti nella variabile body.

+2

Oppure il client sta aprendo il file con uno strumento/funzione che sostituisce automaticamente \ n con \ r \ n. Molti editor di testo di Windows lo fanno. –

+0

Questo è buono. Ho trovato l'occorrenza di 0d 0a tra le righe quando aperto nell'editor binario VS ma non con Notepad ++. Quindi deve esistere nella variabile del corpo? Aggiornerò il mio post originale con il codice. –

+0

FYI, il client non sapeva di cosa stessero parlando poiché il file non aveva alcun ritorno a capo. –

1

Il "\n" alla fine di ogni write chiamata

EDIT: So che questa è una nuova linea, non un ritorno a capo, ma scommetto che i soldi il cliente è sempre confuso tra i due ed è in realtà questo ciò sta causando il problema

+6

È un avanzamento di riga, non un ritorno a capo. – BoltClock

+4

'\ n' è un avanzamento di riga. '\ r' è il ritorno a capo. – ChrisF

+0

@BoltClock, @ChrisF - Lo so, ma a meno che non ci sia un ritorno carraige alla fine del corpo, questo sarà ciò che il cliente si lamenta di – w69rdy

1

Nel codice si inserisce un avanzamento riga (\ n).

Il cliente sta parlando di un ritorno a capo (\ r). Forse il tuo cliente sta prendendo un line feed per un ritorno a capo?

0

Il client distingue tra CR e LF? Il flush() è necessario? Stai sovraccaricando il buffer se non si scarica?

A meno che non si disponga di una quantità enorme di testo, si potrebbe trarre maggiore profitto dalla creazione di uno StringBuilder per formattare il testo esattamente come lo si desidera con \ n, \ r, \ t o qualsiasi altra cosa e poi pomparlo direttamente in StreamWriter .

0

Se il primo carattere di ogni stringa body era "\ r", spiegherebbe quello che stai vedendo.

0

Hai controllato se body termina anche con caratteri che non vuoi stampare? Questa è l'altra fonte potenziale di problemi.

Problemi correlati