我的流阅读器有问题。我想从文本文件中读取一行。
我想要一条特定的线,比如第七条线。而且我不知道该怎么做。
这是一个功能或类似的东西?喜欢file.ReadLine(7号)?
最简单的方法可能是使用LINQ结合File.ReadLines
:
string line = File.ReadLines("foo.txt").ElementAt(6); // 0-based
您可以使用File.ReadAllLines
,但即使您只想要一个早期文件,也会读取整个文件。如果您需要各种不同的线路,这意味着您可以一次性阅读它们。您可以编写一种方法来有效地轻松读取多个特定行(即一次通过,但一次不超过一行),但如果您只想要一行,则会有点过分。
请注意,如果没有足够的行,这将抛出异常 - 如果要在没有任何异常的情况下处理它,可以使用ElementAtOrDefault
。
如果你想逐行阅读,最好使用
string line = File.ReadLines(fileName).Skip(N).FirstOrDefault();
因此,您将避免从文件中读取所有行,并且只有在您获得所需行之后才会读取行。如果你需要几行,那么最好读取所有行到数组,然后从该数组中获取你的行:
string[] lines = File.ReadAllLines(fileName);
if (lines.Count() > N)
line = lines[N];
如果你想通过使用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;
}