使用StreamReader读取特定行

问题描述 投票:0回答:3

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

我想要一条特定的线,比如第七条线。而且我不知道该怎么做。

这是一个功能或类似的东西?喜欢file.ReadLine(7号)?

c# streamreader
3个回答
9
投票

最简单的方法可能是使用LINQ结合File.ReadLines

string line = File.ReadLines("foo.txt").ElementAt(6); // 0-based

您可以使用File.ReadAllLines,但即使您只想要一个早期文件,也会读取整个文件。如果您需要各种不同的线路,这意味着您可以一次性阅读它们。您可以编写一种方法来有效地轻松读取多个特定行(即一次通过,但一次不超过一行),但如果您只想要一行,则会有点过分。

请注意,如果没有足够的行,这将抛出异常 - 如果要在没有任何异常的情况下处理它,可以使用ElementAtOrDefault


3
投票

如果你想逐行阅读,最好使用

string line = File.ReadLines(fileName).Skip(N).FirstOrDefault();

因此,您将避免从文件中读取所有行,并且只有在您获得所需行之后才会读取行。如果你需要几行,那么最好读取所有行到数组,然后从该数组中获取你的行:

 string[] lines = File.ReadAllLines(fileName);

 if (lines.Count() > N)
     line = lines[N];

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;

}

© www.soinside.com 2019 - 2024. All rights reserved.