Zapis i odczyt danych, należą do elementarnych zagadnień, które powinien znać programista. Dlatego warto poświęcić im trochę czasu aby je dobrze opanować.
Strumienie są jednym ze sposobów przesyłania danych do i z programu. Za każdym razem, gdy aplikacja np. zapisuje lub odczytuje plik wykonuje operację związaną z wysyłaniem lub odbieraniem bajtów, używa w tym celu właśnie strumieni. Różne strumienie zapisują i odczytują różne rzeczy. Każdy strumień jest pochodną abstrakcyjnej klasy Stream. Trzeba w tym miejscu wymienić minimum trzy najczęściej wykorzystywane klasy pochodne:
- FileStream – zapis i odczyt danych w plikach
- MemoryStream – zapis i odczyt danych w obszarach pamięci
- NetworkStream – zapis i odczyt danych na innych komputerach lub urządzeniach w sieci.
Kilka informacji ogólnych
- Aby móc używać strumieni, potrzebna jest nam biblioteka System.IO.
- Podczas pracy ze strumieniami bardzo ważne jest by pamiętać o zamykaniu strumieni. Podczas pracy np. z plikami tekstowymi, pliki będą zablokowane, do czasu aż strumień nie zostanie zamknięty.
- Do strumienia możesz wpisać dane tekstowe lub binarne, używając w tym celu jego metody Write().
- By pobrać dane z pliku, pamięci, sieci lub czegokolwiek innego co korzysta ze strumieni, możesz użyc metody Read().
- Można odczytywać dane z naprawdę dużych plików, nawet tak dużych, że się nie mieszczą w pamięci.
- Większość strumieni udostępnia metodę Seek(), która umożliwia określenie położenia w strumieniu i wykonywanie w tym miejscu operacji odczytu lub zapisu danych
Oczywiście C# przyzwyczaja nas do bardzo wygodnych rozwiązań, udostępniając klasy radzące sobie w prostszy sposób. Takimi klasami są m.in.:
- StreamReader
- StreamWriter
Korzystając z takiej klasy wystarczy nam tylko uchwyt do pliku, by móc np. dopisać tekst. Utworzony w ten sposób obiekt, automatycznie tworzy obiekt FileStream i otworzy wskazany plik. Przykładowy kod wyglądałby następująco: