Файлы с разделителями строк не предназначены для произвольного доступа. Таким образом, вы должны искать файл, читая и отбрасывая необходимое количество строк.
Современный подход:
class LineReader : IEnumerable<string>, IDisposable {
TextReader _reader;
public LineReader(TextReader reader) {
_reader = reader;
}
public IEnumerator<string> GetEnumerator() {
string line;
while ((line = _reader.ReadLine()) != null) {
yield return line;
}
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
public void Dispose() {
_reader.Dispose();
}
}
Использование:
// path is string
int skip = 300;
StreamReader sr = new StreamReader(path);
using (var lineReader = new LineReader(sr)) {
IEnumerable<string> lines = lineReader.Skip(skip);
foreach (string line in lines) {
Console.WriteLine(line);
}
}
Простой подход:
string path;
int count = 0;
int skip = 300;
using (StreamReader sr = new StreamReader(path)) {
while ((count < skip) && (sr.ReadLine() != null)) {
count++;
}
if(!sr.EndOfStream)
Console.WriteLine(sr.ReadLine());
}
}