我试图找出是否可以在using语句中关闭这样的流并打开另一个流?
以下是代码:
string combined = Path.Combine(path, some + ".txt");
if (File.Exists(combined))
{
using (TextReader obj2 = new StreamReader(combined))
{
string line = obj2.ReadLine();
if (line != null && !line.Contains("Mon"))
{
obj2.Close();
TextWriter obj = File.AppendText(combined);
obj.WriteLine("Mon\t\t\t|Thue\t\t\t|Wedn\t\t\t|Thurs\t\t\t|Friday\t\t\t|Sat\t\t\t|Sun\t\t\t ");
obj.Close();
}
}
}
答案 0 :(得分:1)
你的例子是正确的。但是,您不能“重复使用”obj2
;该变量只在using
块内部读取。使用不同的对象引用关闭并重新打开同一文件是安全的; using
关键字只是保证在块结束时调用Dispose()
。在StreamReader
上,Dispose()
只会关闭流,但由于您已经在块内完成了此操作,因此不会发生任何事情。
另请注意,在您的示例中,obj
不受using
保护:您不保证在阻止退出之前调用obj.Dispose()
。不过,这是可以的,因为你自己明确地关闭了流。
答案 1 :(得分:0)
无论是否可能以及发生了什么,只是不要这样做。为什么?这是因为:
using
声明的目的,更新:上述第(3)和(5)点的直接后果是我误解了您的代码,并认为您将TextReader
的新实例分配到obj2
。我只是没有发现其他变量obj
的名称几乎不同。