Вы должны быть в состоянии использовать
myStreamReader.BaseStream.Position = desiredPosition;
myStreamReader.DiscardBufferedData();
для перемещения потока в определенное место.
РЕДАКТИРОВАТЬ: Следующий вопрос, как найти desiredPosition
. Поскольку вы хотите переместить позицию назад через файл, а не вперед , из этого следует, что вы прочитали каждую позицию в некоторой точке. Вам нужно следить за тем, где вы находитесь в потоке, когда вы читаете свои строки, и сохранять позиции в List<int> positions
. Изначально список должен содержать 0
в нулевой позиции. По мере обработки строк добавляйте длину строки плюс размер разрыва строки в список. Если вы хотите вернуться к строке k
, positions[k]
должна занять нужную вам позицию.
Например, если в вашем файле есть строки ниже, ваша кодировка использует один символ на букву, а разделитель строк в файле выполнен в стиле Windows \r\n
Quick
brown fox
jumps over lazy
dog
тогда ваш список positions
должен иметь {0, 7, 17, 34}
Обратите внимание, что я добавил 2 в каждой строке для символов-разделителей.
P.S. Это уродливое решение, не так ли? Если это какой-то комфорт, вы не первый человек, который столкнулся с ним. Вот несколько непристойные разговоры от кого-то, кто хотел решить подобную проблему еще в 2007 году.