调用ReadAllText后是否需要关闭文件
本文关键字:文件 ReadAllText 是否 调用 | 更新日期: 2023-09-27 18:22:36
我正在执行以下操作:
if (File.Exists(filePath))
{
string base64 = File.ReadAllText(filePath);
return new ImageContentDTO
{
ImageContentGuid = imageContentGuid,
Base64Data = base64
};
}
这非常好用。我想问的是,在读完文件后,我是否需要关闭文件或类似的东西。如果需要,如何关闭?
不,您不必显式关闭该文件,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.ReadToEnd
和StreamReader.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"。如果我删除其中一个关闭,则会生成文件,但文件显示为空白,没有数据。我必须加上一个结束符才能使它正常工作。