2014-06-28 74 views
0
//C# 
using (System.IO.StreamWriter writer = 
    new System.IO.StreamWriter("me00.txt", true)) 
{ 
    writer.WriteLine("Hey"); //saved 
} 
System.IO.StreamWriter writer02 = new System.IO.StreamWriter("me01.txt", true); 
writer02.WriteLine("Now hey x2"); //not saved 

文件me00.txt和me01.txt被創建,但只有第一個文件的內容被保存。System.IO.StreamWriter:爲什麼我必須使用關鍵字「using」

me00.txt將有行嘿。 me01.txt將是一個空的txt文件; 「現在嘿x2」沒有保存。

關鍵字「使用」做了什麼導致這種觀察?

+0

決不永遠打開一些東西的蒸汽,不要關閉它。 –

回答

6

您不必使用「使用」。這只是一個快捷鍵,讓你從做甚至更打字 ...

另一種方法是窩在一個try-finally整件事構建類似如下:

System.IO.StreamWriter writer = null; 

try 
{ 
    writer = new System.IO.StreamWriter("me00.txt", true); 
    writer.WriteLine("Hey"); 
} 
finally 
{ 
    if (writer != null) 
     writer.Dispose(); 
) 

當作家處置,這也是已關閉,這是你失蹤的一步。使用的提供了一個簡潔的方式來完成所有這些。

1

沖洗Buffer。它與using語句一起工作,因爲當流處理/關閉時緩衝區被刷新。

只需撥打writer02.Flush();

從MSDN上StreamWriter.Flush

刷新流不會刷新其基礎編碼器,除非你明確地調用Flush或關閉

此外,您還需要處理Stream。當您完成流時,請不要忘記撥打Dispose方法。
使用聲明將爲你做。如果您調用Dispose,則可能不需要調用Flush。

1

添加:

writer02.Close(); 

--------------:

public void Test() 
    { 
     //C# 
     using (System.IO.StreamWriter writer = new System.IO.StreamWriter("me00.txt", true)) 
     { 
      writer.WriteLine("Hey"); 
     } 
    } 

由於這個代碼是相同的代碼

 public void Test() 
    { 
     //C# 
     System.IO.StreamWriter writer = null; 
     try 
     { 
      writer = new System.IO.StreamWriter("me01111.txt", true); 
      writer.WriteLine("Hey"); //saved 
     } 
     finally 
     { 
      if (writer != null) //Flush data 
      { 
       ((IDisposable)writer).Dispose(); 
      } 
     } 
    } 
相關問題