在使用它将文件加载到字符串变量中时,是否需要在C#中显式关闭StreamReader?

时间:2010-11-09 17:17:42

标签: c# streamreader

示例:

variable = new StreamReader( file ).ReadToEnd();

这可以接受吗?

6 个答案:

答案 0 :(得分:42)

不,这不会关闭StreamReader。你需要关闭它。使用为您执行此操作(并将其处理以便更快地进行GC):

using (StreamReader r = new StreamReader("file.txt"))
{
  allFileText = r.ReadToEnd();
}

或者在.Net 2中,您可以使用新文件。静态成员,那么你不需要关闭任何东西:

variable = File.ReadAllText("file.txt");

答案 1 :(得分:19)

您应该始终处置您的资源。

// the using statement automatically disposes the streamreader because
// it implements the IDisposable interface
using( var reader = new StreamReader(file) )
{
    variable = reader.ReadToEnd();
}

或者至少手动调用它:

reader = new StreamReader(file);
variable = reader.ReadToEnd();
reader.Close();

答案 2 :(得分:6)

您需要处理实现IDisposable的对象。使用using语句确保在不显式调用Dispose方法的情况下处理它。

using (var reader = new StreamReader(file))
{
  variable = reader.ReadToEnd();
}

或者,使用File.ReadAllText(String)

variable = File.ReadAllText(file);

答案 3 :(得分:4)

是的,每当您创建一次性对象时,您最好使用using语句

处理它
using (var reader = new StreamReader(file)) {
  variable = reader.ReadToEnd(file);
}

在这种情况下,您可以使用File.ReadAllText方法来简化表达式

variable = File.ReadAllText(file);

答案 4 :(得分:0)

关闭StreamReader是一种很好的做法。使用以下模板:

string contents;

using (StreamReader sr = new StreamReader(file)) 
{
   contents = sr.ReadToEnd();
}

答案 5 :(得分:0)

最好使用使用关键字;那么你不需要明确地关闭任何东西。