Frage C # ignoriert \ n in einer Zeichenfolge, wenn es in eine Datei geschrieben wird


Ich habe eine einfache Zeichenfolge, die '\ n' enthält. Es soll in eine Datei geschrieben werden. Für zB:

var s = new StringBuilder();

s.Append("hello");
s.Append("\n");
s.Append("betty");
s.Append("is");
s.Append("my");
s.Append("\n");
s.Append("name");

string str = s.ToString();
Console.WriteLine(str);

Diese Zeichenfolge wird wie erwartet gedruckt:

Hallo
bettyismy
Name

Wenn ich nun versuche, diese Zeichenfolge in eine Datei zu schreiben, benutze folgendes:

var w = new StreamWriter(crcFilePath);
w.WriteLine(crcString);
w.Close();

Der Inhalt der Datei ist:

hellobettyismyname

Irgendeine Idee, warum es das \ n in der Schnur ignoriert.


5
2018-04-15 05:49


Ursprung


Antworten:


Es ist wahrscheinlich die Anwendung oder das System, das Sie verwenden, um Ihre Datei anzuzeigen, die den Zeilenvorschub ignoriert, nicht C # ignoriert. Verwenden Sie anstelle von \ n System.Umgebung.NeueLine oder \ r \ n. Sehen diese Frage für Informationen über \ r und \ n. Notepad ++ kann auch Leerraumzeichen einschließlich neuer Zeilen anzeigen, was in solchen Fällen hilfreich sein kann.


7
2018-04-15 05:57



Der Inhalt der Datei ist:

 helloashnaismyname

Der Inhalt der Datei ist tatsächlich dies (im Hex-Modus):

==========================================================================
      xDump Version 1.04 - Hex Dump Utility
      Copyright (c) Xidicone Pty Ltd 20013  -  All rights reserved.
==========================================================================
0000: 68 65 6C 6C 6F 0A 62 65   74 74 79 69 73 6D 79 0A | hello.bettyismy. 
0010: 6E 61 6D 65 0D 0A                                 | name..           
==========================================================================

Irgendeine Idee, warum es das \ n in der Schnur ignoriert.

Wie aus dem Hex-Dump ersichtlich ist, werden die \ n Zeichen nicht ignoriert.

Das Problem ist, ich vermute, dass Sie die Datei im Editor geöffnet haben und die Zeilenende-Markierungen nicht verkraften und daher falsch angezeigt wird.

Ändern Sie den Code so und Notepad lädt die Datei wie erwartet:

    var s = new StringBuilder();
                s.Append("hello");
                s.Append("\r\n");
                s.Append("betty");
                s.Append("is");
                s.Append("my");
                s.Append("\r\n");
                s.Append("name");
                string str = s.ToString();

7
2018-04-15 05:59



Sie sollten environment.newLine verwenden. Die beste Methode hierfür ist:

s.Append(string.Format("Foo{0}Bar", Environment.NewLine));

Die {0} wird in der gesamten Zeichenfolge durch das zweite Argument in der string.Format-Methode (in diesem Fall eine neue Zeile) ersetzt. Es ist ein sauberer und empfohlener Ansatz.


2
2018-04-15 05:52



Sie können verwenden s.AppendLine() Anstatt von s.Append("\n"); Probieren Sie es einfach aus. StringBuilder.AppendLine () -Methode


1
2018-04-15 05:52