Samouczek dotyczący strumieniowania w języku C#: StreamReader i StreamWriter [Przykład]

Co to jest strumień C#?

W operacjach plików C# strumienie są zwykle używane do odczytu i zapisu plików. Strumień jest dodatkową warstwą utworzoną między aplikacją a plikiem. Strumień jest używany w celu zapewnienia płynnych operacji odczytu i zapisu pliku.

Strumienie są zwykle używane podczas odczytu danych z dużych plików. Korzystając ze strumieni, dane z dużych plików są dzielone na małe fragmenty i wysyłane do strumienia. Te fragmenty danych można następnie odczytać z aplikacji.

Powodem podzielenia go na małe kawałki jest wpływ na wydajność odczytu dużego pliku za jednym razem. Jeśli za jednym razem odczytasz dane, powiedzmy, z pliku o wielkości 100 MB, aplikacja może się zawiesić i stać się niestabilna. Najlepszym podejściem jest wówczas użycie strumieni w celu podzielenia pliku na łatwe do zarządzania fragmenty.

Tak więc, gdy operacja zapisu jest wykonywana na pliku, dane, które mają zostać zapisane, są najpierw zapisywane do strumienia. Następnie dane ze strumienia są zapisywane do pliku. To samo dotyczy operacji odczytu. W operacji odczytu dane są najpierw przesyłane z pliku do strumienia. Następnie dane są odczytywane z aplikacji za pośrednictwem strumienia. Przyjrzyjmy się przykładowi, w jaki sposób możemy czytać i zapisywać za pomocą strumieni.

Czytnik strumieniowy

Czytnik strumieniowy służy do odczytywania danych z pliku za pomocą strumieni. Dane z pliku są najpierw wczytywane do strumienia. Następnie aplikacja odczytuje dane ze strumienia.

W naszym przykładzie założymy, że mamy plik na dysku D o nazwie Przykład.txt. Plik będzie prostym plikiem tekstowym i będzie zawierał 2 linie, jak pokazano poniżej

  • Guru99 – .Net
  • Guru99 -C#

W naszym przykładzie utworzymy prostą aplikację konsolową i będziemy pracować ze strumieniami plików

Spójrzmy na przykład, jak możemy wykorzystać strumienie do odczytu danych z pliku. Wpisz poniższy kod w pliku program.cs.

Czytnik strumieniowy

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";

    using (StreamReader sr = File.OpenText(path))
    {
     String s = "";

     while ((s = sr.ReadLine()) != null)
     {
      Console.WriteLine(s);
     }
    }
   Console.ReadKey();
  }
 }
}

Wyjaśnienie kodu: -

  1. Najpierw deklarujemy obiekt czytnika strumienia. Obiekt czytnika strumienia jest używany w języku C# do definiowania strumienia z pliku do aplikacji. Dane będą przesyłane z pliku do strumienia za każdym razem, gdy zostaną odczytane z pliku. Plik.OpenText służy do otwierania pliku „Example.txt” w trybie tylko do odczytu. Procedura obsługi pliku jest następnie wysyłana do obiektu czytnika strumienia.
  2. Następnie definiujemy zmienną tymczasową 's', która posłuży do odczytania wszystkich danych z pliku.
  3. Następnie używamy metody czytnika strumienia ReadLine, aby odczytać każdy wiersz z bufora strumienia. Kiedy wykonujemy tę operację działanie, każdy wiersz zostanie najpierw przeniesiony z pliku do bufora. Następnie wiersz ciągu zostanie przeniesiony z bufora do zmiennej 's'. Następnie zapisujemy zawartość ciągu 's' na konsoli.

Gdy powyższy kod jest ustawiony, a projekt jest uruchamiany przy użyciu visual Studio, otrzymasz poniższe dane wyjściowe.

Wynik:-

Czytnik strumieniowy

Z danych wyjściowych widać, że czytnik strumienia odczytał oba wiersze z pliku. Na koniec linie ciągu odczytane ze strumienia zostały przesłane do Konsoli.

Pisarz strumieniowy

Moduł zapisujący strumień służy do zapisywania danych do pliku przy użyciu strumieni. Dane z aplikacji są najpierw zapisywane do strumienia. Następnie strumień zapisuje dane do pliku. Przyjrzyjmy się przykładowi wykorzystania strumieni do zapisu danych z pliku. Wpisz poniższy kod w pliku program.cs.

Pisarz strumieniowy

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";
    
    using (StreamWriter sr = File.AppendText(path))
    {
     sr.WriteLine("Guru99 - ASP.Net");
     sr.Close();

     Console.WriteLine(File.ReadAllText(path));
    }
    Console.ReadKey();
  }
 }
}

Wyjaśnienie kodu: -

  1. Najpierw deklarujemy obiekt zapisu strumieniowego. Obiekt zapisywania strumienia jest używany w języku C# do definiowania strumienia. Strumień służy następnie do zapisu danych z aplikacji do pliku. Dane będą przesyłane z aplikacji do strumienia za każdym razem, gdy zajdzie potrzeba ich zapisania. Polecenie File.AppendText służy do otwierania pliku „Example.txt” w trybie dopisywania. Procedura obsługi pliku jest następnie wysyłana do obiektu zapisującego strumień.
  2. Używamy metody zapisu strumienia Writeline, aby zapisać do strumienia linię „Guru99 – ASP.Net”. Ze strumienia linia zostanie następnie zapisana do pliku.
  3. Następnie zamykamy moduł zapisujący strumień po zapisaniu do pliku. Zwykle dobrą praktyką jest zamykanie procedur obsługi plików, gdy plik nie jest już potrzebny do celów zapisu.
  4. Na koniec ponownie czytamy zawartość pliku i zapisujemy ją do logu konsoli. Ma to na celu sprawdzenie, czy linia została zapisana do pliku.

Po ustawieniu powyższego kodu i uruchomieniu projektu za pomocą programu Visual Studio otrzymasz poniższy wynik.

Wynik:-

Pisarz strumieniowy

Z danych wyjściowych wynika, że ​​wiersz „Guru99 – ASP.Net” został pomyślnie dodany do pliku. Wszystkie 3 linie tekstu można zobaczyć w konsoli.

Podsumowanie

  • Strumienie służą jako poziom pośredni pomiędzy aplikacją a plikiem.
  • StreamReader jest używany, gdy wymagane jest odczytanie danych z pliku.
  • Streamwriter jest używany, gdy dane muszą zostać zapisane w pliku.