2009-10-08 4 views
25

Gibt es eine Möglichkeit herauszufinden, was .NET als "Standard-Terminator" verwendet? In der Dokumentation für StringBuilder.AppendLine (String) heißt es beispielsweise "Anhängt eine Kopie der angegebenen Zeichenfolge, gefolgt vom Standard-Zeilenabschlusszeichen ...". Mehrere textbezogene Klassen in .NET beziehen sich auf dasselbe Konzept..NET "Standard-Leitungsabschluss"?

Gibt es eine Möglichkeit, programmgesteuert herauszufinden, was als Leitungsabschluss (zur Laufzeit) verwendet wird? Oder ist es sicher anzunehmen, dass es immer "\ r \ n" für eine Windows-Maschine sein wird? Ich würde diesen Wert lieber nicht fest in meinen Code einbinden, wenn ich es vermeiden kann.

Antwort

40

StringBuilder.AppendLine verwenden Environment.NewLine, die "\r\n" für Nicht-Unix-Plattformen und "\n" für Unix-Plattformen ist.

Es wird immer "\r\n" für eine Windows-Maschine sein, aber Sie können Environment.NewLine anstelle eines fest codierten Werts verwenden.

dank @Guffa für diese Überprüfung

+1

Ah perfekt, ich wusste, dass es so etwas geben muss. Vielen Dank! –

+1

wünschte, es gab eine Möglichkeit, den Standard-Terminator für ein bestimmtes StringBuilder-Objekt zu ändern – Alex

17

Dies ist der Code aus dem StringBuilder.AppendLine(string) Methode (unter Verwendung von .NET Reflector):

[ComVisible(false)] 
public StringBuilder AppendLine(string value) 
{ 
    this.Append(value); 
    return this.Append(Environment.NewLine); 
} 

Wie Sie sehen, ist es die Environment.NewLine Eigenschaft in der Tat ist verwenden.

2

Auf dem Mac war die neue Zeile "\ r", bis sie ihr Betriebssystem auf Linux basierten. Jetzt ist es '\ n'.

+3

Nur ein kleiner Nit-Pick: Das heutige Mac OS basiert eigentlich auf UNIX, nicht auf Linux. Und die erste UNIX-basierte Version kam Anfang 2001, etwa ein Jahr vor der Veröffentlichung von .NET. Die '\ r' -Notation war also seit einiger Zeit nicht mehr relevant. –