调用ReadAllText后是否需要关闭文件?

Sub*_*bby 10 c# file

我正在做以下事情:

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

这完全没问题.我想问的是,在我阅读完文件后,我是否需要关闭文件或类似内容.如果是这样,怎么样?

Dan*_*rth 22

不,您不必明确关闭文件,File.ReadAllText为您处理.

该文档非常明确地包含此信息:

此方法打开一个文件,读取文件的每一行,然后将每一行添加为字符串的元素.然后它关闭文件.
[...]
即使引发了异常,也可以通过此方法关闭文件句柄.


Tim*_*ter 10

使用时不需要关闭任何东西,File.ReadAllText因为底层流读取器是隐含关闭的.

MSDN: File.ReadAllText

打开文本文件,读取文件的所有行,然后关闭文件.

这是.NET 4(ILSpy)中的实现:

string result;
using (StreamReader streamReader = new StreamReader(path, encoding))
{
    result = streamReader.ReadToEnd();
}
return result;
Run Code Online (Sandbox Code Playgroud)

using语句处理StreamReader(即使出错),也关闭它.


Ala*_*aju 6

我知道这个问题已经回答了,这已经差不多一年了,但是对于那些搜索和阅读这个问题的人,我建议你在完成这个问题时关闭一个文件,或者至少做一个像我的答案所做的调查.

我不是编程专家,但我最近遇到过这种情况.

我创建了一个WinForms c#程序,用于File.ReadAllText将文本复制到字符串.之后我试图直接从文件夹中删除文件,而不是通过程序,但是我收到一个错误,该文件仍在另一个程序中打开.然后我停止运行该程序,并能够删除该文件.

这是我在Visual Studio 2012 Ultimate中的经验.可能应该做一些不同的事情,但这就是它为我做的事情.

当我用StreamReader.ReadToEnd,然后StreamReader.Close在同一个文件,我没有问题,删除文件,运行程序时.