So, let's say i have a text file with 20 lines, with on each line different text. i want to be able to have a string that has the first line in it, but when i do NextLine(); i want it to be the next line. I tried this but it doesn't seem to work:
string CurrentLine;
int LastLineNumber;
Void NextLine()
{
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
CurrentLine = file.ReadLine(LastLineNumber + 1);
LastLineNumber++;
}
How would i be able to do this? Thanks in advance.
One simple call should do it:
You will want to validate the file exists and of course you still need to watch for blank lines or invalid values but that should give you the basics. To loop over the file you can use the following:
One more note - you won't want to do this with large files since it processes everything in memory.
The
ReadLine
method already reads the next line in theStreamReader
, you don't need the counter, or your custom function for that matter. Just keep reading until you reach your 20 lines or until the file ends.You can't pass a line number to
ReadLine
and expect it to find that particular line. If you look at theReadLine
documentation, you'll see it doesn't accept any parameters.When working with files, you must treat them as streams of data. Every time you open the file, you start at the very first byte/character of the file.
You have to keep the stream open if you want to read more lines.
If you really want to write a method
NextLine
, then you need to store the createdStreamReader
object somewhere and use that every time. Somewhat like this:But I suggest you either loop through the stream:
Or get all the lines at once using the
File
classReadAllLines
method:Well, if you really don't mind re-opening the file each time, you can use:
However, I'd advise you to just read the whole thing in one go using
File.ReadAllLines
, or perhapsFile.ReadLines(...).ToList()
.In general, it would be better if you could design this in a way to leave your file open, and not try to reopen the file each time.
If that is not practical, you'll need to call
ReadLine
multiple times:Note that this can be simplified via
File.ReadLines
: