web-dev-qa-db-ja.com

ファイルを文字列変数にロードするためにC#でStreamReaderを明示的に閉じる必要がありますか?

例:

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

それは受け入れられますか?

33
Matt Ralston

いいえ、これはStreamReaderを閉じません。閉じる必要があります。を使用すると、これが自動的に行われます(GCが早くなるように破棄します)。

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

または、.Net 2で新しいファイルを使用できます。静的メンバーの場合、何も閉じる必要はありません。

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

リソースは常に廃棄する必要があります。

// 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();
19
Dismissile

IDisposableを実装するオブジェクトを破棄する必要があります。 usingステートメントを使用して、Disposeメソッドを明示的に呼び出さずに破棄されるようにします。

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

または、 File.ReadAllText(String) を使用します

_variable = File.ReadAllText(file);
_
6
Greg

はい、使い捨てオブジェクトを作成するときは、必ずusingステートメントを使用して破棄する必要があります

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

ただし、この場合は、File.ReadAllText式を簡素化するメソッド

variable = File.ReadAllText(file);
4
JaredPar

StreamReaderを閉じることをお勧めします。次のテンプレートを使用します。

string contents;

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

singキーワードを使用する方が良いでしょう。その後、明示的に何かを閉じる必要はありません。

0
Paul Sonier