Výukový program Stream v C#: StreamReader & StreamWriter [Příklad]

Co je C# Stream?

V operacích se soubory C# se normálně proudy používají ke čtení a zápisu do souborů. Proud je další vrstva vytvořená mezi aplikací a souborem. Proud se používá k zajištění hladkých operací čtení a zápisu do souboru.

Proudy se běžně používají při čtení dat z velkých souborů. Pomocí streamů jsou data z velkých souborů rozdělena na malé části a odeslána do streamu. Tyto kusy dat pak lze číst z aplikace.

Důvodem pro rozdělení na malé části je dopad na výkon při čtení velkého souboru na jeden záběr. Pokud byste měli číst data ze souboru řekněme 100 MB najednou, vaše aplikace by se mohla zablokovat a stát se nestabilní. Nejlepším přístupem je pak použít proudy k rozdělení souboru na zvládnutelné části.

Takže když se provádí operace zápisu do souboru, data, která mají být zapsána, jsou nejprve zapsána do proudu. Ze streamu se pak data zapisují do souboru. Totéž platí pro operaci čtení. Při operaci čtení se data nejprve přenesou ze souboru do proudu. Data jsou následně načítána z aplikace prostřednictvím streamu. Podívejme se na příklad toho, jak můžeme číst a zapisovat pomocí proudů.

Stream Reader

Čtečka datových proudů slouží ke čtení dat ze souboru pomocí proudů. Data ze souboru jsou nejprve načtena do streamu. Poté aplikace čte data ze streamu.

Pro náš příklad budeme předpokládat, že máme na jednotce D soubor s názvem Example.txt. Soubor bude jednoduchý textový soubor a bude mít 2 řádky, jak je uvedeno níže

  • Guru99 – .Net
  • Guru99 -C#

Pro náš příklad si vytvoříme jednoduchou Console aplikaci a budeme pracovat s File streams

Podívejme se na příklad, jak můžeme použít streamy pro čtení dat ze souboru. Zadejte níže uvedený kód do souboru program.cs.

Stream Reader

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();
  }
 }
}

Vysvětlení kódu:-

  1. Nejprve deklarujeme objekt čtečky proudu. Objekt čtecího proudu se používá v C# k definování proudu ze souboru do aplikace. Data budou přenesena ze souboru do streamu vždy, když budou ze souboru načtena data. Soubor.OpenText se používá k otevření souboru „Example.txt“ v režimu pouze pro čtení. Obslužná rutina souboru je poté odeslána do objektu čtečky proudu.
  2. Dále definujeme dočasnou proměnnou 's', která bude použita ke čtení všech dat ze souboru.
  3. Ke čtení každého řádku z vyrovnávací paměti streamu pak použijeme metodu čtečky proudu ReadLine. Když to provedeme operace, každý řádek bude nejprve přenesen ze souboru do vyrovnávací paměti. Poté bude řádek řetězce přenesen z vyrovnávací paměti do proměnné 's'. Poté zapíšeme obsah řetězce 's' do konzole.

Když je nastaven výše uvedený kód a projekt je spuštěn pomocí Visual Studio, získáte níže uvedený výstup.

Výstup:-

Stream Reader

Z výstupu můžete vidět, že Stream Reader přečetl oba řádky ze souboru. Nakonec byly řádky řetězce přečtené ze streamu odeslány do konzoly.

Stream Writer

Zapisovač proudu se používá k zápisu dat do souboru pomocí proudů. Data z aplikace jsou nejprve zapsána do streamu. Poté stream zapíše data do souboru. Podívejme se na příklad, jak můžeme použít streamy pro zápis dat ze souboru. Zadejte níže uvedený kód do souboru program.cs.

Stream Writer

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();
  }
 }
}

Vysvětlení kódu:-

  1. Nejprve deklarujeme objekt stream Writer. Objekt stream Writer se používá v C# k definování streamu. Proud se pak používá k zápisu dat z aplikace do souboru. Data budou přenesena z aplikace do streamu, kdykoli je potřeba data zapsat. Příkaz File.AppendText se používá k otevření souboru „Example.txt“ v režimu připojení. Obslužná rutina souboru je poté odeslána do objektu stream Writer.
  2. Pro zápis řádku „Guru99 – ASP.Net“ do streamu používáme metodu zápisu streamu Writeline. Ze streamu se pak řádek zapíše do souboru.
  3. Po zápisu do souboru pak zavřeme zapisovač datového proudu. Obvykle je dobrým zvykem zavřít obslužné programy souborů, když soubor již není vyžadován pro účely zápisu.
  4. Nakonec znovu čteme obsah souboru a zapisujeme jej do protokolu konzoly. Toto slouží ke kontrole, zda byl řádek zapsán do souboru.

Když je nastaven výše uvedený kód a projekt je spuštěn pomocí sady Visual Studio, získáte níže uvedený výstup.

Výstup:-

Stream Writer

Z výstupu můžete vidět, že řádek „Guru99 – ASP.Net“ byl do souboru úspěšně přidán. Všechny 3 řádky textu lze vidět v konzole.

Shrnutí

  • Proudy se používají jako meziúroveň mezi aplikací a souborem.
  • StreamReader se používá vždy, když je vyžadováno čtení dat ze souboru.
  • Streamwriter se používá vždy, když je potřeba zapsat data do souboru.