3

我正在使用 aStreamWriter将内容写入记事本。我发现如果我不StreamWriter单独使用语句和实例。该方法无法运行。有人知道原因吗?

    static void Main(string[] args)
    {
        //StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true);
        using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true))
        {
            c.WriteLine("hello");
        }

这可以运行。但是,如果我改为运行注释部分。记事本什么也不显示。

有人知道原因吗?

4

4 回答 4

6

因为当您使用对象时,是一种很好的做法,它会调用 Dispose 方法,而在 StreamWriter 的情况下,它也会在对象上调用 Fush,这会导致数据写入文件中。你可以这样写你的代码:

var c = new StreamWriter(@"C:\Test\important.txt", true);
c.AutoFlush = true;
c.WriteLine("hello");
c.Dispose();
于 2013-05-13T03:56:55.460 回答
1
StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true);
// you need to write something to see 
c.WriteLine("hello");

如果您使用using语句,它将StreamWriter自动处理对象。但是当你没有 using 语句时,你需要手动处理StreamWriter对象。在这种情况下,还要确保即使在异常情况下您也能正确处理对象。所以你可以做如下

StreamWriter c =null;
try
{
  c = new StreamWriter(fileFullPath, true);
  c.WriteLine("hello");
}
finally
{
  if (c!= null)
      c.Close();
}
于 2013-05-13T03:48:29.833 回答
1

如果不使用 using 语句,程序不会将缓冲区中的数据刷新到文件中。这就是为什么当您在记事本中打开文件时不会在文件中写入“hello”的原因。您可以显式刷新缓冲区,以便将数据写入文件:

 StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true)
 c.WriteLine("hello");
 c.Flush();

但是,您仍然需要处理流。但是如果你使用 Dispose() 方法,它会自动刷新缓冲区(通过调用 Flush() 方法),所以你不需要使用 Flush()!

通过使用 'using' 语句,它不仅会刷新缓冲区,还会适当地释放流,您无需显式编写 Dispose()。这是最好的方法。

于 2014-05-22T18:24:53.897 回答
0

using 语句是“ENSURE”范围内的对象将被处置 [MSDN]:http: //msdn.microsoft.com/en-us/library/yh598w02.aspx

using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true))
{
  c.WriteLine("hello");
}

如果不使用 using 语句,我还是推荐使用 try 语句

try
{
  StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true);
}
finally
{
  c.Close();
}
于 2013-05-13T03:58:07.873 回答