Miguel Moura
Miguel Moura

Reputation: 39364

Get line number when reading a file

I am reading all lines in a text file using C# 7 as follows:

using (StreamReader reader = File.OpenText(file)) {    
  String line;    
  while ((line = reader.ReadLine()) != null) {

  }          
}   

For each line I also need to get the line number.

StreamReader does not seem to have a method for getting the line number.

What is the best way to do this?

Upvotes: 0

Views: 7975

Answers (5)

John M.
John M.

Reputation: 76

I know this is already solved and old but I want to share an alternative. The code just returns the line number where it founds a part of the string given, to have the exact one just replace "Contains" with "Equals".

public int GetLineNumber(string lineToFind) {        
    int lineNum = 0;
    string line;
    System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
    while ((line = file.ReadLine()) != null) {
        lineNum++;
        if (line.Contains(lineToFind)) {
            return lineNum;
        }
    }
    file.Close();
    return -1;
}

Upvotes: 0

zambonee
zambonee

Reputation: 1647

In addition to the other solutions here, I like to use File.ReadAllLines(string) to create a string[] result and then for (int i = 0; i < result.Length; i++)....

Upvotes: 1

J. Anderson
J. Anderson

Reputation: 309

you can compute line number by your self:

using (StreamReader reader = File.OpenText(file)) {    
  String line;
  int n = 0;
  while ((line = reader.ReadLine()) != null) {
    n++;
  }          
}   

Upvotes: 0

Nisarg Shah
Nisarg Shah

Reputation: 14541

I'd just create an integer to keep track of the line number myself.

using (StreamReader reader = File.OpenText(file)) {    
    var lineNumber = 0;
    String line;    
    while ((line = reader.ReadLine()) != null) {
        ...

        lineNumber++;
    }          
}  

Microsoft also uses such a variable to count the lines in one of the examples: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/file-system/how-to-read-a-text-file-one-line-at-a-time

Upvotes: 4

gyurix
gyurix

Reputation: 1086

You should use your own local variable for it, like that:

using (StreamReader reader = File.OpenText(file)) {    
      String line;    
      int lineNum=0;
      while ((line = reader.ReadLine()) != null) {
         ++lineNum;
      }          
    }   

Upvotes: 2

Related Questions