File.ReadAllText()和使用StreamReader读取文件内容之间的任何区别?

起初我使用
StreamReader
从文件中读取文本:
StreamReader reader = new StreamReader(dialog.OpenFile());
txtEditor.Text = reader.ReadToEnd();
但发现约
File.ReadAllText
似乎将我的代码简化为1行。两者之间有什么不同吗?我什么时候应该使用另一个?
txtEditor.Text = File.ReadAllText(dialog.FileName);
    
已邀请:
如果您使用
ReadToEnd()
方法没有区别。不同之处在于,如果您对大文件使用
ReadLine()
方法,因为您没有将整个文件加载到内存中,而是允许您以块的形式处理它。 因此,使用
File.ReadAllText()
而不是
ReadToEnd()
,因为它使您的代码更短,更易读。它还负责妥善处理资源,因为您可能忘记使用
StreamReader
(就像您在代码段中所做的那样)。     
查看mscorlib中的代码,File.ReadAllText实际上在内部调用StreamReader.ReadToEnd!
[SecurityCritical]
private static string InternalReadAllText(string path, Encoding encoding, bool checkHost)
{
    string result;
    using (StreamReader streamReader = new StreamReader(path, encoding, true, StreamReader.DefaultBufferSize, checkHost))
    {
        result = streamReader.ReadToEnd();
    }
    return result;
}
    
如果你使用
ReadToEnd
,它们是相同的。否则,使用
StreamReader
允许您一次读取字节,使用它们进行一些计算,然后根据需要将它们丢弃。例如,如果您有一个包含2,000个数字列表的文件,并且您想将它们一起添加,则可以: 调用
File.ReadAllText
将所有内容读入字符串,然后解析该字符串以计算总和。 或者你可以创建一个
StreamReader
并一次读取几个字节,随时计算总和。 这两种方法的主要区别在于瞬态内存使用。获得总和后,您可以随时丢弃所有中间数据。在
File.ReadAllText
方法中,在某些时候你将整个文件内容放在内存中,而使用
StreamReader
方法,你在任何时候只在内存中有几个字节的文件内容。这可能是一个问题,具体取决于文件的大小和您正在进行的计算类型。
File.ReadAllText
方便快捷。
StreamReader
功能强大,但工作量更大。     
如果您使用
File.ReadAllText
读取非托管日志文件(由fstream控制),请拨打
File.ReadAllText
,将有
IO.Exception
:   该文件由另一个进程控制 您必须使用StreamReader
ReadToEnd
来替换它。     

要回复问题请先登录注册