2013-05-13 73 views
2

我使用StreamWriter写入记事本中的东西。而且我发现我是否不使用陈述并单独使用StreamWriter。该方法无法运行。有人知道原因吗?c#使用语句和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"); 
     } 

这可以运行。但是,如果我运行标记的部分。记事本什么也没有显示。

有人知道原因吗?

+0

谢谢大家!你们是非常有帮助的。 Msdn的英语对我来说太过简单和简洁。很高兴在这里寻求帮助。再次感谢。 – martin 2013-05-14 01:14:37

回答

5

因为当你使用,这是很好的做法使用对象,它调用Dispose方法和StreamWriter的的情况下,它调用Fush的对象,以及这将导致要写入的数据在文件中。 using语句是“确保”的范围对象将被处理完毕[MSDN]

var c = new StreamWriter(@"C:\Test\important.txt", true); 
c.AutoFlush = true; 
c.WriteLine("hello"); 
c.Dispose(); 
1
StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true); 
// you need to write something to see 
c.WriteLine("hello"); 

如果使用using statement它会自动处理StreamWriter对象。但是,如果您没有使用语句,则需要手动执行处理StreamWriter对象。在这种情况下,即使在异常情况下也要确保正确地处理对象。所以你可以做如下

StreamWriter c =null; 
try 
{ 
    c = new StreamWriter(fileFullPath, true); 
    c.WriteLine("hello"); 
} 
finally 
{ 
    if (c!= null) 
     c.Close(); 
} 
0

:你可以写你的代码,这样http://msdn.microsoft.com/en-us/library/yh598w02.aspx

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

如果不使用语句中使用,我仍然推荐使用try语句

try 
{ 
    StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true); 
} 
finally 
{ 
    c.Close(); 
} 
0

如果不使用using语句,程序不会将数据从缓冲区中清除到文件中。这就是为什么当您在记事本中打开“hello”时没有写入该文件。你可以明确地刷新缓冲区,以您的数据写入文件:

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

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

通过使用'using'语句,不仅可以刷新缓冲区,还可以正确释放流,而且不需要明确写入Dispose()。这是做到这一点的最佳方式。