2010-07-19 14 views
5

Ich habe eine sehr einfache Konsolenanwendung, die eine Textdatei erstellt. Im Folgenden finden Sie eine Zusammenfassung des Codes:StreamWriter schreibt Wagenrücklauf?

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

Der Client behauptet, es gibt Wagenrücklauf am Ende jeder Zeile. Woher kommen diese Wagenrückgaben?

Update: Nach dem Öffnen im VS-Binary-Editor und Notepad ++ gab es keine Vorkommen von . Ich gehe zurück zum Kunden.

+2

Was verwenden sie, um die Dateien zu lesen, um dies zu überprüfen? – ChrisF

+5

Sie sagen "der Kunde behauptet ..." Haben Sie sich selbst überprüft? –

+0

Dan, was ist ein gutes Dienstprogramm zum Anzeigen dieser speziellen Zeichen? –

Antwort

3

Öffnen Sie die Datei im Visual Studio-Binary-Editor (File.Open.File, klicken Sie auf die Schaltfläche Öffnen, wählen Sie Öffnen mit ... und wählen Sie Binary Editor), und suchen Sie nach 0D Bytes. Wenn keine vorhanden sind, dann entweder:

  • Ihr Client kann die den Unterschied zwischen einem Zeilenvorschub nicht sagen, und einem Wagenrücklauf,

  • Ihre Übertragungsverfahren die Datei auf dem Weg ist, zu ändern. Gibt es eine FTP-Binär/Ascii-Mismatch?

Wenn 0D Bytes sind, dann sind sie in Ihrer body variabel.

+2

Oder der Client öffnet die Datei mit einem Werkzeug/Funktion, die \ n automatisch ersetzt mit \ r \ n. Viele Windows-Texteditoren tun dies. –

+0

Das ist gut. Ich fand das Auftreten von 0d 0a zwischen den Zeilen beim Öffnen im VS-Binäreditor, aber nicht mit Notepad ++. Also muss es in der Körpervariablen existieren? Ich werde meinen ursprünglichen Post mit dem Code aktualisieren. –

+0

FYI, der Client wusste nicht, worüber er sprach, da die Datei keine Zeilenumbrüche enthielt. –

1

Die "\n" am Ende jedes write Aufruf

EDIT: Ich weiß, das eine neue Linie, kein Wagenrücklauf aber ich wette, Geld ist der Kunde zwischen den beiden verwirrt und es ist eigentlich diese das verursacht das Problem

+6

Das ist ein Zeilenvorschub, kein Wagenrücklauf. – BoltClock

+4

'\ n' ist ein Zeilenvorschub. '\ r' ist Wagenrücklauf. – ChrisF

+0

@BoltClock, @ChrisF - Ich weiß, aber wenn es keine Rückgabe am Ende des Körpers gibt, wird dies sein, was der Client über – w69rdy

1

In Ihrem Code legen Sie einen Zeilenvorschub (\ n).

Ihr Kunde spricht über einen Wagenrücklauf (\ r). Vielleicht nimmt Ihr Kunde einen Zeilenvorschub pro Wagenrücklauf?

0

Unterscheidet der Client zwischen einem CR und LF? Ist die Spülung() notwendig? Überladen Sie den Puffer, wenn Sie nicht spülen?

Sofern Sie nicht über eine große Menge an Text verfügen, können Sie einen StringBuilder verwenden, um den Text mit \ n, \ r, \ t oder was auch immer zu formatieren und dann direkt in einen StreamWriter zu pumpen .

0

Wenn jedes Zeichen des ersten Zeichens body '\ r' war, würde es erklären, was Sie sehen.

0

Haben Sie überprüft, ob body auch mit Zeichen endet, die nicht gedruckt werden sollen? Dies ist die andere potenzielle Problemquelle.