我的流阅读器有问题。我想从文本文件中读取一行。
我想要一条特定的行,就像第七行一样。而且我不知道该怎么做。
这是一个功能还是那样的?喜欢file.ReadLine(7号)?
答案 0 :(得分:9)
最简单的方法可能是将LINQ与File.ReadLines
结合使用:
string line = File.ReadLines("foo.txt").ElementAt(6); // 0-based
您可以使用File.ReadAllLines
,但即使您只想要一个早期的整个文件,也会读取整个文件。如果您需要各种不同的线路,这意味着您可以一次性阅读它们。您可以编写一种方法来有效地读取多个特定行(即一次通过,但一次不超过一行)合理地,但如果您只想要一行,那就太过分了。< / p>
请注意,如果没有足够的行,这将抛出异常 - 如果您想要处理ElementAtOrDefault
而没有任何例外,则可以使用{{1}}。
答案 1 :(得分:3)
如果您想逐行阅读,最好使用
string line = File.ReadLines(fileName).Skip(N).FirstOrDefault();
因此,您将避免从文件中读取所有行,并且您将只读取行,直到您获得所需的行。如果你需要多行,那么最好读取所有行到数组,然后从该数组中获取你的行:
string[] lines = File.ReadAllLines(fileName);
if (lines.Count() > N)
line = lines[N];
答案 2 :(得分:0)
如果要使用StreamReader到特定行。 假设文本文件中有数据Line1,Line2,Line3,Line4。 每次调用“ ReadLine”方法时,它将增加1行。 这意味着您可以编写自己的函数并将参数传递给函数。 您可以这样做。
string l1, l2, l3, l4;
StreamReader sr = new StreamReader(sourcePath);
l1 = sr.Readline(); // Line 1
l2 = sr.Readline(); // Line 2
l3 = sr.Readline(); // Line 3
public string StreamReadLine(string sourcepath, int lineNum)
{
int index = lineNum;
string strLine = "N/A";
StreamReader sr = new StreamReader(sourcepath);
try
{
for (var i = 0; i <= index; i++)
{
strLine = sr.ReadLine();
if (i == index)
break;
i += 1;
}
}
catch (Exception ex)
{
strLine = ex.ToString();
}
return strLine;
}