11

私は次のことをしています:

if (File.Exists(filePath))
{
   string base64 = File.ReadAllText(filePath);
   return new ImageContentDTO
   {
      ImageContentGuid = imageContentGuid,
      Base64Data = base64
   };
}

これは完全に正常に機能します。私が聞きたいのは、ファイルからの読み取りが完了した後、ファイルまたは同様のものを閉じる必要があるかどうかです。もしそうなら、どのように?

4

5 に答える 5

23

いいえ、ファイルを明示的に閉じる必要はありません。自動的に処理File.ReadAllTextされます。

ドキュメントには、この情報が非常に明示的に含まれています。

このメソッドは、ファイルを開き、ファイルの各行を読み取り、各行を文字列の要素として追加します。次に、ファイルを閉じます。
[...]
例外が発生した場合でも、ファイル ハンドルはこのメソッドによって閉じられることが保証されます。

于 2013-07-16T08:22:24.130 に答える
10

File.ReadAllText下層のストリーム リーダーは暗黙的に閉じられるため、使用時に何も閉じる必要はありません。

MSDN:File.ReadAllText

テキスト ファイルを開き、ファイルのすべての行を読み取り、ファイルを閉じます

.NET 4 (ILSpy) での実装は次のとおりです。

string result;
using (StreamReader streamReader = new StreamReader(path, encoding))
{
    result = streamReader.ReadToEnd();
}
return result;

usingステートメントは(エラーのStreamReader場合でも) を破棄し、それも閉じます。

于 2013-07-16T08:23:24.107 に答える
3

IDisposableインスタンスのみを閉じる必要があります。通常は、次のように使用します。

  // StreamReader is IDisposable and should be Closed/Disposed 
  // either explicitly or by using  
  using (StreamReader sr = new StreamReader(filePath)) {
    String base64 = sr.ReadToEnd();
    ...
  }

コードにIDisposableインスタンスがないため(File.ReadAllTextはIDisposableではないStringを返します)、閉じる/破棄するものは何もありません

于 2013-07-16T08:34:16.587 に答える