我正在做以下事情:
if (File.Exists(filePath))
{
string base64 = File.ReadAllText(filePath);
return new ImageContentDTO
{
ImageContentGuid = imageContentGuid,
Base64Data = base64
};
}
这完全没问题。我想问的是,在我读完文件后,我是否需要关闭文件或类似文件。如果是这样,怎么样?
答案 0 :(得分:21)
不,您不必明确关闭该文件,File.ReadAllText
会为您处理。
The documentation非常明确地包含此信息:
此方法打开一个文件,读取文件的每一行,然后将每一行添加为字符串的元素。然后关闭文件。
[...]
保证文件句柄被此方法关闭,即使引发了异常。
答案 1 :(得分:10)
使用File.ReadAllText
时不需要关闭任何内容,因为底层流阅读器会被隐式关闭。
打开文本文件,读取文件的所有行,然后关闭 文件
以下是.NET 4(ILSpy)中的实现:
string result;
using (StreamReader streamReader = new StreamReader(path, encoding))
{
result = streamReader.ReadToEnd();
}
return result;
using
语句处理StreamReader
(即使出错),也会关闭它。
答案 2 :(得分:6)
我知道这个问题已经回答了,这已经差不多一年了但是对于那些搜索和阅读这个问题的人,我建议你在完成这个问题时关闭一个文件,或者至少做一个像我的回答一样的调查示出。
我不是编程专家,但我最近遇到过这种情况。
我创建了一个WinForms c#程序,并使用File.ReadAllText
将文本复制到字符串中。之后我试图直接从文件夹中删除文件,而不是通过程序,但是我收到一个错误,该文件仍在另一个程序中打开。然后我停止运行该程序,并能够删除该文件。
这是我在Visual Studio 2012 Ultimate中的经验。可能应该做一些不同的事情,但那就是它为我做的事情。
当我在同一个文件上使用StreamReader.ReadToEnd
然后StreamReader.Close
时,我在运行程序时删除文件没有问题。
答案 3 :(得分: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的字符串)你没有什么可以关闭/处理
答案 4 :(得分:0)
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();
这是我刚刚使用stringbuilder做的一个工作示例:“ sb”。如果我删除其中一个关闭文件,则会生成文件,但该文件显示为空白,没有数据。我必须添加一个附件才能使其正常工作。