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

本文关键字:文件 ReadAllText 是否 调用 | 更新日期: 2023-09-27 18:22:36

我正在执行以下操作:

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

这非常好用。我想问的是,在读完文件后,我是否需要关闭文件或类似的东西。如果需要,如何关闭?

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

不,您不必显式关闭该文件,File.ReadAllText会帮您处理这件事。

文档非常明确地包含以下信息:

此方法打开一个文件,读取文件的每一行,然后将每一行添加为字符串的元素。然后关闭文件
[…]
即使引发异常,该方法也保证关闭文件句柄。

使用File.ReadAllText时不需要关闭任何内容,因为underlineg流读取器是隐式关闭的。

MSDN:File.ReadAllText

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

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

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

using语句处理StreamReader(即使出现错误),也会关闭它。

我知道这个问题已经得到了回答,现在已经快一年了,但对于那些搜索和阅读这个问题的人来说,我建议你在完成后关闭一个文件,或者至少像我的回答一样进行调查。

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

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

这是我在Visual Studio 2012 Ultimate中的体验。它可能应该做一些不同的事情,但它对我来说就是这样

当我在同一个文件上使用StreamReader.ReadToEndStreamReader.Close时,在运行程序时删除文件没有问题。

您必须仅关闭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的字符串)您没有任何要关闭/处置的

StreamWriter outputFile = new StreamWriter(@"C:'Users'Marc'Desktop'_App'files'Data" + dat1 + ".txt");
outputFile.WriteLine(sb.ToString());
outputFile.Close();
StreamWriter outputFileex = new StreamWriter(@"C:'Users'Marc'Desktop'_App'files'DataEx" + dat1 + ".txt");
outputFileex.WriteLine(sbex.ToString());
outputFileex.Close();

这是我刚刚用字符串生成器做的一个工作示例:"sb"。如果我删除其中一个关闭,则会生成文件,但文件显示为空白,没有数据。我必须加上一个结束符才能使它正常工作。