2015-09-27 71 views
1

我注意到在使用下面的代碼創建的文件中沒有換行符。在數據庫中,我也存儲文本,這些都存在。使用File.WriteAllText時沒有換行符(字符串,字符串)

string story = "Critical error occurred after " 
    + elapsed.ToString("hh:mm:ss") 
    + "\n\n" + exception.Message; 
File.WriteAllText(path, story); 

因此,一些short googling後我才知道,我應該指的是使用環境換行字面\ n新生產線,而不是。所以我補充說,如下所示。

string story = "Critical error occurred after " 
    + elapsed.ToString("hh:mm:ss") 
    + "\n\n" + exception.Message; 
    .Replace("\n", Environment.NewLine); 
File.WriteAllText(path, story); 

不過,輸出文件中沒有換行符。我錯過了什麼?

回答

3

嘗試StringBuilder的方法 - 這是更多的可讀性,而且你不需要記住Environment.NewLine\n\r\n

var sb = new StringBuilder(); 

string story = sb.Append("Critical error occurred after ") 
       .Append(elapsed.ToString("hh:mm:ss")) 
       .AppendLine() 
       .AppendLine() 
       .Append(exception.Message) 
       .ToString(); 
File.WriteAllText(path, story); 

簡單的解決方案:

string story = "Critical error occurred after " 
    + elapsed.ToString("hh:mm:ss") 
    + Environment.NewLine + exception.Message; 
File.WriteAllLines(path, story.Split('\n')); 
+0

沒有解決原來的問題,但建議本身是好的TEAD。我發佈了一個非常簡單的示例,跳過構建器,以縮短內容。重點是使用* File *類來代替其他用於寫入的其他類,並且仍然可以獲得換行符。這可能嗎? –

+0

@KonradViltersten更新了答案,只需用'Environment.NewLine'替換'\ n'並且它可以工作 – Backs

+0

呵呵,你看到我的第二個例子嗎?多餘的線,從結尾第二?我添加* Environment.NewLine *,但它仍然**不進入文件。因此,這個問題。但我會給你一個免費贈品,因爲我發現了什麼是錯的。而不是* WriteAllText *,我需要去* WriteAllLines *和* Split *故事。 –

0

可以使用的WriteLine()方法如下面的代碼

using (StreamWriter sw = StreamWriter(path)) 
     { 
      string story = "Critical error occurred after " +elapsed.ToString("hh:mm:ss"); 
      sw.WriteLine(story); 
      sw.WriteLine(exception.Message); 
     } 
+0

* File *中沒有這樣的方法。當然,我可以換到另一個班,但我希望保持簡短。我很好奇在* File * class中沒有換行符... –

1

使用

File.WriteAllText(path, content);

使用

File.WriteAllLines(path, content.Split('\n'));