Czytam plik w linii po wierszu i chcę móc ponownie uruchomić odczyt, wywołując metodę Rewind()
.Powróć StreamReader na początek
Jak mogę manipulować moim System.IO.StreamReader
i/lub jego bazowym System.IO.FileStream
, aby zacząć od nowa z odczytaniem pliku?
Mam sprytny pomysł, aby użyć pliku FileStream.Seek(long, SeekOffset)
do poruszania się po pliku, ale nie ma on żadnego wpływu na otaczające go System.IO.StreamReader
. Mógłbym Close()
i ponownie przypisać zarówno strumień, jak i odesłanie do czytnika, ale mam nadzieję, że jest lepszy sposób.
Bądź ostrożny, gdy robi to na wszystkich plików, które nie są proste pliki tekstowe ANSI (czy raczej jakieś pliki, które kodowanie wstępnie kłusować). Zobacz moją odpowiedź poniżej, aby uzyskać więcej szczegółów. – Eamon
Zapominasz o klauzuli using/IDisposable pattern. Nowością w .NET 4.0 jest StreamReader (stream, Encoding.UTF8, true, 1024, true) i nowy StreamWriter (stream, Encoding.UTF8, 1024, true) przezwyciężają złamany wzorzec IDisposable (zamykanie StreamReader/Writer zamyka bazowy strumień ... nawet M $ nie zawsze jest w porządku, przynajmniej na początku). Jeśli chcesz czytać ze strumienia więcej niż raz, użyj dwóch lub więcej StreamReaderów, każdy w swoich własnych klauzulach użycia (nie zagnieżdżonych w sobie). Podobnie z StreamWriter. Powinieneś bardzo rzadko wywoływać DiscardBufferedData na dokumentację. – TamusJRoyce