Вы должны быть в состоянии использовать
myStreamReader.BaseStream.Position = desiredPosition;
myStreamReader.DiscardBufferedData();
для перемещения потока в определенном месте.
EDIT: Следующий вопрос: как найти 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. Это уродливое решение, не так ли? Если это любой комфорт, вы не первый человек, который столкнулся с ним. Here is a somewhat obscene rant от кого-то, кто хотел решить подобную проблему еще в 2007 году
Нужно ли вам определенная позиция (например, 17) ИЛИ вы имеете в виду определенную строку (например, строку 3)? – Yahia
определенная строка, но строка всегда будет одним и тем же символом (одна строка, содержащая символ '{') –
, нет никакого способа разместить точную строку ... только до абсолютного или относительного байта внутри файла. ,если вам нужно позиционировать линию, вам необходимо реализовать это самостоятельно - либо путем загрузки файла в строку [], либо путем сканирования файла и построения индекса, содержащего абсолютную позицию для каждой строки ... – Yahia