Нужно ли явно закрывать StreamReader в С# при его использовании для загрузки файла в строковую переменную?
Пример:
variable = new StreamReader( file ).ReadToEnd();
Это приемлемо?
Ответ 1
Нет, это не приведет к закрытию StreamReader. Вам нужно закрыть его. Использование делает это для вас (и распоряжается им так, чтобы он GC'd раньше):
using (StreamReader r = new StreamReader("file.txt"))
{
allFileText = r.ReadToEnd();
}
Или, альтернативно, в .Net 2 вы можете использовать новый файл. статические члены, то вам ничего не нужно закрывать:
variable = File.ReadAllText("file.txt");
Ответ 2
Вы всегда должны распоряжаться своими ресурсами.
// 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();
Ответ 3
Вам нужно удалить объекты, которые реализуют IDisposable. Используйте оператор using, чтобы убедиться, что он удаляется без явного вызова метода Dispose.
using (var reader = new StreamReader(file))
{
variable = reader.ReadToEnd();
}