我現在正在處理的程序必須生成一個文件。首先生成文件內容爲字符串,然後將該字符串寫入文件,還是應該直接將內容添加到文件中?我應該先建立一個字符串然後寫入文件嗎?
相對於另一個有什麼優勢嗎?
該文件的大小約爲0.5-1MB。
我現在正在處理的程序必須生成一個文件。首先生成文件內容爲字符串,然後將該字符串寫入文件,還是應該直接將內容添加到文件中?我應該先建立一個字符串然後寫入文件嗎?
相對於另一個有什麼優勢嗎?
該文件的大小約爲0.5-1MB。
如果您將文件寫入即時文件,您將獲得不將所有內容都保存在內存中的好處,如果文件足夠大並且不斷刷新流。
但是,你會更容易遇到部分寫入文件的問題,因爲你在一段時間內完成IO而不是一次性完成。
就我個人而言,我會使用StringBuilder進行構建,然後將它全部寫入磁盤中。
如果部分寫入的文件存在問題,寫入臨時文件,然後在文件準備就緒時將其移至預定位置。這樣你就可以得到兩個好處;不在內存中存儲太多,同時確保生成的文件一致。 – 2011-03-02 15:45:17
作爲一個單一的寫作**可以**仍然給你一個部分寫入的文件,所以它不應該是一個不增量寫入的理由。 – 2011-03-02 15:47:36
@Fredrik - 真的,我喜歡這一點,雖然我會將它與StringBuilder結合使用,由於錯誤處理,這會引發@Rowland - 也是如此,但1)您的機會較低,並且2)您的錯誤處理該場景可以在一個地方。 – jvenema 2011-03-02 15:52:15
我認爲最好使用字符串或stringbuilder來存儲數據,然後使用File.Write函數寫入文件。
您可能想要支持該聲明... – 2011-03-02 16:05:49
我認爲這是一個更好的主意,一般來說,創建一個StreamWriter
並寫入它。當你不需要時,爲什麼要記住事情呢?而且這是一件容易的事情。例如:
using (var writer = new StreamWriter("filename"))
{
writer.WriteLine(header);
// write all your data with Write and WriteLine,
// taking advantage of composite formatting
}
如果你想建立多行與StringBuilder
你必須寫一樣的東西:
var sb = new StringBuilder();
sb.AppendLine(string.Format("{0:N0} blocks read", blocksRead));
// etc., etc.
// and finally write it to file
File.WriteAllText("filename", sb.ToString());
還有其他的選擇,當然。您可以將這些線條製作成List<string>
,然後使用File.WriteAllLines
。或者,您可以寫入StringStream
,然後將其寫入文件。但是所有這些方法都讓您多次處理數據。只需打開StreamWriter
並撰寫。
主要的原因,我認爲這是在一般一個更好的主意直接去輸出:
StringBuilder
的API更清潔。
你是什麼意思「生成文件的內容作爲一個字符串」? – Rahul 2011-03-02 15:41:26
基本上,我有一個巨大的字典,必須被翻譯成一個特定格式的文件,大部分硬編碼。所以,我想知道是否應該隨時寫入文件,或者首先將所有內容寫入到字符串構建器中,然後在我成爲圓頂時將此構建器寫入文件中 – xbonez 2011-03-02 16:11:17