Нужно ли явно закрывать StreamReader в C # при его использовании для загрузки файла в строковую переменную? - PullRequest
33 голосов
/ 09 ноября 2010

Пример:

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

Это приемлемо?

Ответы [ 6 ]

43 голосов
/ 09 ноября 2010

Нет, это не закроет StreamReader.Вы должны закрыть это.Использование делает это для вас (и утилизирует его так, что GC'd быстрее):

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

Или, в качестве альтернативы, в .Net 2 вы можете использовать новый файл.статические члены, тогда вам не нужно ничего закрывать:

variable = File.ReadAllText("file.txt");
19 голосов
/ 09 ноября 2010

Вы всегда должны распоряжаться своими ресурсами.

// 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();
6 голосов
/ 09 ноября 2010

Вам необходимо избавиться от объектов, которые реализуют IDisposable.Используйте оператор using, чтобы убедиться, что он удаляется без явного вызова метода Dispose.

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

В качестве альтернативы используйте File.ReadAllText(String)

variable = File.ReadAllText(file);
4 голосов
/ 09 ноября 2010

Да, всякий раз, когда вы создаете одноразовый объект, вы должны утилизировать его предпочтительно с помощью оператора использования

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

В этом случае вы можете просто использовать метод File.ReadAllText для упрощения выражения

variable = File.ReadAllText(file);
0 голосов
/ 09 ноября 2010

Вам лучше использовать , используя ключевое слово ;тогда вам не нужно ничего явно закрывать.

0 голосов
/ 09 ноября 2010

Хорошая практика - закрывать StreamReader.Используйте следующий шаблон:

string contents;

using (StreamReader sr = new StreamReader(file)) 
{
   contents = sr.ReadToEnd();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...