使用StreamReader读取特定行

时间:2013-11-29 14:00:42

标签: c# streamreader

我的流阅读器有问题。我想从文本文件中读取一行。

我想要一条特定的行,就像第七行一样。而且我不知道该怎么做。

这是一个功能还是那样的?喜欢file.ReadLine(7号)?

3 个答案:

答案 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;

}