我正在使用StreamWriter
将内容写入记事本。我发现如果我不单独使用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 :(得分:6)
因为当你在使用时使用对象这是一个好习惯,它会调用Dispose方法,在StreamWriter的情况下,它也会调用Fush on对象,这会导致数据写入文件。你可以写这样的代码:
var c = new StreamWriter(@"C:\Test\important.txt", true);
c.AutoFlush = true;
c.WriteLine("hello");
c.Dispose();
答案 1 :(得分: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();
}
答案 2 :(得分:1)
如果不使用using语句,程序不会将数据从缓冲区刷新到文件中。这就是为什么当你在记事本中打开它时,文件中没有写入“hello”。您可以显式刷新缓冲区,以便将数据写入文件:
StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true)
c.WriteLine("hello");
c.Flush();
但是,您仍然需要处理流。但是如果你使用Dispose()方法,它会自动刷新缓冲区(通过调用Flush()方法),所以你不需要使用Flush()!
通过使用'using'语句,它不仅可以刷新缓冲区,还可以适当地释放流,而不需要显式地编写Dispose()。这是最好的方法。
答案 3 :(得分: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();
}