Возвратите StreamReader началу

Я читаю файл в линию за линией, и я хочу смочь перезапустить чтение путем вызова метода Rewind().

Как я могу управлять моим System.IO.StreamReader и/или его базовое System.IO.FileStream запускаться с чтения файла?

Я получил умную мысль использовать FileStream.Seek(long, SeekOffset) для перемещения файла но это не имеет никакого эффекта включение System.IO.StreamReader. Я мог Close() и повторно присвойте и поток и ссылки читателя, но я надеюсь, что существует лучший путь.

64
задан leppie 15 January 2016 в 19:11
поделиться

2 ответа

Вам нужно искать в потоке, как вы это делали, затем позвоните DiscardBufferedData на StreamReader. Документация здесь:

Правка: Добавление примера кода:

Stream s = new MemoryStream();
StreamReader sr = new StreamReader(s);
// later... after we read stuff
s.Position = 0;
sr.DiscardBufferedData();        // reader now reading from position 0
111
ответ дан 24 November 2019 в 15:40
поделиться

Это все хорошо, если BaseStream действительно можно установить Position свойство в 0.

Если нельзя (пример - поток HttpWebResponse), то хорошим вариантом будет копирование потока в MemoryStream... там можно установить Position в 0 и перезапускать Stream сколько угодно.

17
ответ дан 24 November 2019 в 15:40
поделиться