根据Microsoft对The ReadLines
和ReadAllLines
methods 的解释,当您使用时ReadLines
,您可以在返回整个集合之前开始枚举字符串集合.使用时ReadAllLines
,必须等待返回整个字符串数组,然后才能访问该数组.因此,当您使用非常大的文件时,ReadLines
可以更高效.
当他们说:
1 - "当你使用ReadLines时,你可以在返回整个集合之前开始枚举字符串集合. "如果编写下面的代码行,那么这不意味着ReadLines
方法执行结束并且整个集合是返回并存储在变量filedata中?
IEnumerable<String> filedata = File.ReadLines(fileWithPath)
Run Code Online (Sandbox Code Playgroud)
2 - "当你使用时ReadAllLines
,你必须等待返回整个字符串数组才能访问数组 ".这是否意味着,在下面的代码片段中,如果读取一个大文件,那么如果在读取文件后立即使用数组变量hugeFileData将不会拥有所有数据?
string[] hugeFileData = File.ReadAllLines(path)
string i = hugeFileData[hugeFileData.length-1];
Run Code Online (Sandbox Code Playgroud)
3 - "当您使用非常大的文件时,ReadLines可以更高效 ".如果是这样,那么在读取大文件时,以下代码是否有效?我相信第二行和第三行下面的代码会读取文件两次,如果我错了,请纠正我.
string fileWithPath = "some large sized file path";
string lastLine = File.ReadLines(fileWithPath).Last();
int totalLines = File.ReadLines(fileWithPath).Count();
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中两次在同一文件上调用ReadLines的原因是当我尝试下面的代码时,我TextReader
在下面的代码片段的第3行上得到了一个异常"无法从关闭状态读取".
IEnumerable<String> filedata = File.ReadLines(fileWithPath);
string lastLine = filedata.Last();
int totalLines = filedata.Count();
Run Code Online (Sandbox Code Playgroud)