将文件的前10行提取为字符串

use*_*133 13 c# streamreader

public void get10FirstLines()
{ 
     StreamReader sr = new StreamReader(path);
     String lines = "";
     lines = sr.readLine();
}
Run Code Online (Sandbox Code Playgroud)

如何在字符串中获取文件的前10行?

Jon*_*eet 29

而不是StreamReader直接使用,使用File.ReadLines哪个返回IEnumerable<string>.然后你可以使用LINQ:

var first10Lines = File.ReadLines(path).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

使用的好处File.ReadLines,而不是File.ReadAllLines在于它只是读取而不是读取整个文件你感兴趣的线路.另一方面,它仅适用于.NET 4+.如果你想要它用于.NET 3.5,那么使用迭代器块很容易实现.

因此,要求ToList()有强制查询进行评估(即实际读取的数据),因此,它的阅读正好一次.没有ToList调用,如果你试图多次迭代first10Lines,它会不止一次地读取文件(假设它完全正常工作;我似乎记得File.ReadLines在这方面没有非常干净地实现).

如果您希望前10行作为单个字符串(例如将"\ r \n"分隔开来),那么您可以使用string.Join:

var first10Lines = string.Join("\r\n", File.ReadLines(path).Take(10));
Run Code Online (Sandbox Code Playgroud)

显然,您可以通过更改调用中的第一个参数来更改分隔符.


w.b*_*w.b 5

var lines = File.ReadAllLines(path).Take(10);
Run Code Online (Sandbox Code Playgroud)

  • `File.ReadLines()`在这里可能是一个非常大的优化. (2认同)

Rah*_*thi 5

您可以尝试使用File.ReadLines。尝试这个:-

var lines = File.ReadLines(path).Take(10);
Run Code Online (Sandbox Code Playgroud)

在您的情况下,请尝试此操作,因为您希望将前10行作为单个字符串使用,因此您可以尝试这样使用string.Join()

var myStr= string.Join("", File.ReadLines(path).Take(10));
Run Code Online (Sandbox Code Playgroud)