Я читаю файл в линию за линией, и я хочу смочь перезапустить чтение путем вызова метода Rewind()
.
Как я могу управлять моим System.IO.StreamReader
и/или его базовое System.IO.FileStream
запускаться с чтения файла?
Я получил умную мысль использовать FileStream.Seek(long, SeekOffset)
для перемещения файла но это не имеет никакого эффекта включение System.IO.StreamReader
. Я мог Close()
и повторно присвойте и поток и ссылки читателя, но я надеюсь, что существует лучший путь.
Вам нужно искать в потоке, как вы это делали, затем позвоните 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
Это все хорошо, если BaseStream
действительно можно установить Position
свойство в 0.
Если нельзя (пример - поток HttpWebResponse
), то хорошим вариантом будет копирование потока в MemoryStream
... там можно установить Position
в 0 и перезапускать Stream
сколько угодно.