Przywróć StreamReader do początku

Przywróć StreamReader do początku

Musisz poszukać w strumieniu, tak jak to zrobiłeś, a następnie zadzwonić do DiscardBufferedData na StreamReader . Dokumentacja tutaj:

Edycja:dodanie przykładowego kodu:

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

Używam tej metody:

System.IO.StreamReader reader = new System.IO.StreamReader("file.txt")
//end of reading
reader.DiscardBufferedData();
reader.BaseStream.Seek(0, System.IO.SeekOrigin.Begin); 

Odpowiedź Amy zadziała na niektórych plikach, ale w zależności od kodowania strumienia bazowego możesz uzyskać nieoczekiwane wyniki.

Na przykład, jeśli strumień jest w formacie UTF-8 i ma preambułę, StreamReader użyje tego do wykrycia kodowania, a następnie wyłączy niektóre wewnętrzne flagi, które informują go o wykryciu kodowania i sprawdzeniu preambuły. Jeśli zresetujesz pozycję strumienia do początku, czytnik strumienia ponownie wykorzysta preambułę, ale po raz drugi uwzględni ją w danych wyjściowych. Nie ma publicznych metod resetowania tego stanu kodowania i preambuły, więc najbezpieczniejszą rzeczą do zrobienia, jeśli chcesz „przewinąć” czytnik strumienia, jest wyszukanie strumienia bazowego na początek (lub ustawienie pozycji), jak pokazano, i utworzenie nowego StreamReadera, samo wywołanie DiscardBufferedData() na StreamReader nie wystarczy.