System.IO.StreamWriter:为什么我必须使用关键字"使用"

时间:2014-06-28 15:39:22

标签: c# text using streamwriter

//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,但只保存了第一个文件的内容。

me00.txt会排队嘿。 me01.txt将是一个空的txt文件; “现在嘿x2”没有保存。

关键词“使用”会导致这种观察?

3 个答案:

答案 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 :(得分:1)

冲洗Buffer。它与using语句一起使用,因为在处理/关闭流时刷新缓冲区。

只需致电writer02.Flush();

来自StreamWriter.Flush上的MSDN:

  

刷新流不会刷新其底层编码器,除非您明确调用Flush或Close

此外,您需要处理Stream。完成流后,不要忘记调用Dispose方法 using语句将为您完成。如果您调用Dispose,则可能不需要调用Flush。

答案 2 :(得分: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();
            }
        }
    }