2012-10-08 199 views
4

我正在爲一位嚴格遵守LOC的教授任務。出於這個原因,我想做到以下幾點:如果StreamReader或StreamWriter未關閉,會發生什麼情況?

(new StreamWriter(saveFileDialog.FileName)).Write(textBox.Text); 

,而不是

StreamWriter sw = new StreamWriter(saveFileDialog.FileName); 
sw.Write(textBox.Text); 
sw.Close(); 

在第一個例子,我不關閉流。這個可以嗎?它會導致任何安全或內存問題?

+14

沒有冒犯你,但是這是一個非常愚蠢的要求。我不知道有任何合法的公司會說,「你不能爲這個項目編寫超過N行的代碼。」這個世界上用什麼方式教學呢? –

+2

如果行數對你的導師很重要......也許他應該教英語。 – Nasreddine

+0

我有一位英國教授,他在LOC上評分。請告訴你的導師,較低的LOC不能保證總是更快的執行。 – naveen

回答

15

您可能無法獲得任何輸出或輸出不完整。關閉作家也沖洗它。而不是手動調用Close可言,我會使用一個using語句......但如果你只是試圖將文本寫入一個文件,使用一次性的File.WriteAllText電話:

File.WriteAllText(saveFileDialog.FileName, textBox.Text); 
1

短回答時,爲該操作分配的資源不會被釋放,更不用說它可以潛在地鎖定該文件。沒有fout.Close

5

簡單的解決方案()應該是:

 using (StreamWriter fout = new StreamWriter(saveFileDialog.FileName)) 
     { 
      fout.Write(textBox.Text); 
     } 
0

任何GC將如何爲你關閉它。但事實是,直到流您的GC關閉不必要把擱置的資源

8

也許你的導師正在尋找:

File.WriteAllText(saveFileDialog.FileName, textbox.Text); 

這是合理的,喜歡簡潔的代碼,但不能以犧牲可讀性或正確性。

3

如果你不關閉它,你不能保證它會寫出寫入它的最後一塊數據。這是因爲它使用緩衝區,並且在關閉流時刷新緩衝區。

其次,它將文件鎖定爲打開狀態,防止另一個進程使用它。

使用文件流的最安全方法是使用using語句。

+0

+1似乎提到的使用聲明更傾向於那麼實際的直接答案。(不是我個人的意見,雖然):) – Freeman

0

您可以依次用using blok嘗試clean your no managed object

 using (var streamWriter = new StreamWriter(saveFileDialog.FileName)) 
     { 
      streamWriter.Write(textBox.Text); 
     } 
0

這將是一個記憶的危險。

我會一直使用的StreamWriter在「使用」聲明

using(StreamWriter fout = new StreamWriter(saveFileDialog.FileName) 
{ 
    fout.Write(textBox.Text); 
} 
+0

你也無法訪問該文件在任何其他進程,直到你關閉StreamWriter。 –

+1

'使用'請... – naveen

+0

所以使用聲明後,它會自動關閉,對不對? –

1

考慮

using(var fout = new StreamWriter(saveFileDialog.FileName){ fout.write(textBox.Text); } 
相關問題