Я пытаюсь прочитать (маленький) файл кусками по несколько строк за раз, и мне нужно вернуться к началу отдельных кусков.
Проблема в том, что после самого первого звонка на
streamReader.ReadLine();
свойство streamReader.BaseStream.Position
установлено в конец файла! Теперь я предполагаю, что некоторое кеширование выполняется за кулисами, но я ожидал, что это свойство будет отражать количество байтов, которые I использовали из этого файла. И да, файл имеет более одной строки :-)
Например, повторный вызов 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)))
{...}
Есть предложения?