Я пытаюсь прочитать (небольшой) файл кусками по несколько строк за раз, и мне нужно вернуться к началу определенных кусков.
Проблема в том, что после первого вызова
streamReader.ReadLine();
свойство streamReader.BaseStream.Position
устанавливается в конец файла! Теперь я предполагаю, что за кулисами выполняется некоторое кэширование, но я ожидал, что это свойство будет отражать количество байтов, которые я использовал из этого файла. И да, в файле больше одной строки :-)
Например, повторный вызов ReadLine()
(естественно) вернет следующую строку в файле, которая не начинается с позиции, ранее указанной streamReader.BaseStream.Position
.
Как мне найти фактическое место, где заканчивается 1-я строка, чтобы я мог вернуться туда позже?
Я могу думать только о ручном учете, добавляя длины строк, возвращаемых ReadLine(), но даже здесь есть пара предостережений:
- ReadLine() удаляет символы новой строки, которые могут иметь переменную длину (это '\n'? Это "\r\n"? И т. д.)
- Я не уверен, что это будет работать нормально с символами переменной длины.
... поэтому сейчас кажется, что мой единственный вариант - переосмыслить, как я анализирую файл, поэтому мне не нужно перематывать.
Если это поможет, я открываю свой файл следующим образом:
using (var reader = new StreamReader(
new FileStream(
m_path,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)))
{...}
Какие-либо предложения?