Stream u C#: StreamReader i StreamWriter [Primjer]

โšก Pametni saลพetak

AC# stream je sloj izmeฤ‘u vaลกe aplikacije i datoteke koji vam omoguฤ‡uje ฤitanje ili pisanje podataka u malim dijelovima. Ovdje ฤ‡ete nauฤiti kako StreamReader i StreamWriter rad, s primjerima i glavnim vrstama tokova.

  • ๐ŸŒŠ ล to je to: Stream je meฤ‘usloj izmeฤ‘u vaลกe aplikacije i datoteke.
  • ???? ฤŒitaฤ streama: StreamReader ฤita tekst iz datoteke redak po redak ili blok.
  • โœ๏ธ PotokWriter: PotokWriter zapisuje tekst u datoteku putem streama.
  • ๐Ÿงฉ Vrste streamova: FileStream, MemoryStream i BufferSvi edStream-ovi proizlaze iz klase Stream.
  • ๐Ÿค– Pomoฤ‡ umjetne inteligencije: AI alati poput GitHub Copilota trenutno generiraju C# stream kod.

C# ฤitaฤ streama i Writer

ล to je C# Stream?

U C# operacijama s datotekama, tokovi se obiฤno koriste za ฤitanje i pisanje u datoteke. Stream je dodatni sloj stvoren izmeฤ‘u aplikacije i datoteke. Tok se koristi za osiguravanje glatkih operacija ฤitanja i pisanja u datoteku.

Tokovi se obiฤno koriste pri ฤitanju podataka iz velikih datoteka. Koriลกtenjem tokova, podaci iz velikih datoteka rastavljaju se u male dijelove i ลกalju u tok. Ti se dijelovi podataka zatim mogu proฤitati iz aplikacije.

Razlog razbijanja na male dijelove je uฤinak ฤitanja velike datoteke odjednom. Ako biste odjednom proฤitali podatke iz, recimo, datoteke od 100 MB, vaลกa bi aplikacija mogla samo stati i postati nestabilna. Tada je najbolji pristup koriลกtenje tokova za rastavljanje datoteke na dijelove kojima se moลพe upravljati.

Dakle, kada se operacija pisanja izvodi u datoteku, podaci koji se trebaju pisati prvo se zapisuju u tok. Iz streama se podaci zatim zapisuju u datoteku. Isto vrijedi i za operaciju ฤitanja. U operaciji ฤitanja podaci se prvo prenose iz datoteke u tok. Podaci se zatim ฤitaju iz aplikacije putem streama. Pogledajmo primjer kako moลพemo ฤitati i pisati pomoฤ‡u tokova.

Vrste streamova u C#

Sve klase stream u C# izvedene su iz abstract Stream razreda u System.IO prostor imena. Svaka vrsta cilja drugaฤiji izvor podataka, ali dijeli iste metode ฤitanja i pisanja. Najฤeลกฤ‡e koriลกteni streamovi navedeni su u nastavku.

  • Filestream ฤita iz i zapisuje u datoteke na disku, jedan bajt ili blok odjednom.
  • MemoryStream pohranjuje podatke u memoriju umjesto u datoteku, ลกto je korisno za privremene meฤ‘uspremnike.
  • BufferedStream obavija joลก jedan stream kako bi se smanjio broj sporih operacija na disku ili mreลพi.
  • NetworkStream ลกalje i prima podatke putem mreลพne utiฤnice.

Za rad s tekstom, C# pruลพa StreamReader i StreamWriter pomoฤ‡ne klase koje omotavaju stream i obraฤ‘ene su u sljedeฤ‡im odjeljcima.

ฤŒitaฤ toka

ฤŒitaฤ tokova se koristi za ฤitanje podataka iz datoteke pomoฤ‡u tokova. Podaci iz datoteke prvo se uฤitavaju u tok. Nakon toga aplikacija ฤita podatke iz streama.

Za naลก primjer, pretpostavit ฤ‡emo da imamo datoteku na D disku pod nazivom Example.txt. Datoteka ฤ‡e biti jednostavna tekstualna datoteka i imati 2 retka kao ลกto je prikazano u nastavku

  • Guru99 โ€“ .Net
  • Guru99 -C#

Za naลก primjer, izradit ฤ‡emo jednostavnu konzolnu aplikaciju i raditi s tokovima datoteka

Pogledajmo primjer kako moลพemo koristiti tokove za ฤitanje podataka iz datoteke. Unesite donji kod u datoteku program.cs.

ฤŒitaฤ toka

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

Code Obrazloลพenje:-

  1. Prvo, deklariramo objekt ฤitaฤa toka. Objekt ฤitaฤa toka koristi se u C# za definiranje toka od datoteke do aplikacije. Podaci ฤ‡e biti gurnuti iz datoteke u tok kad god se podaci proฤitaju iz datoteke. Datoteka.OpenText koristi se za otvaranje datoteke โ€œExample.txtโ€ u naฤinu rada samo za ฤitanje. Rukovatelj datoteke zatim se ลกalje objektu ฤitaฤa toka.
  2. Zatim definiramo privremenu varijablu 's' koja ฤ‡e se koristiti za ฤitanje svih podataka iz datoteke.
  3. Zatim koristimo metodu ฤitaฤa toka ReadLine za ฤitanje svakog retka iz meฤ‘uspremnika toka. Kada ovo izvedemo operacija, svaki ฤ‡e redak prvo biti prebaฤen iz datoteke u meฤ‘uspremnik. Tada ฤ‡e se linija niza prenijeti iz meฤ‘uspremnika u varijablu 's'. Zatim upisujemo sadrลพaj niza 's' u konzolu.

Kada je gornji kod postavljen i projekt se izvodi pomoฤ‡u Visual Studio, dobit ฤ‡ete donji izlaz.

Izlaz:-

ฤŒitaฤ toka

Iz izlaza moลพete vidjeti da je Stream Reader proฤitao oba retka iz datoteke. Na kraju su redovi niza proฤitani iz toka poslani u konzolu.

Potok Writer

Program za pisanje toka se koristi za pisanje podataka u datoteku pomoฤ‡u tokova. Podaci iz aplikacije prvo se upisuju u stream. Nakon toga tok zapisuje podatke u datoteku. Pogledajmo primjer kako moลพemo koristiti tokove za pisanje podataka iz datoteke. Unesite donji kod u datoteku program.cs.

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

Code Obrazloลพenje:-

  1. Prvo, deklariramo objekt pisca toka. Objekt pisca toka koristi se u C# za definiranje toka. Tok se zatim koristi za pisanje podataka iz aplikacije u datoteku. Podaci ฤ‡e se gurnuti iz aplikacije u tok kad god je potrebno zapisati podatke. Naredba File.AppendText koristi se za otvaranje datoteke "Example.txt" u naฤinu dodavanja. Rukovatelj datotekom zatim se ลกalje objektu za pisanje toka.
  2. Koristimo metodu pisanja u streamu Writeline za pisanje retka "Guru99 โ€“ ASP.Netโ€ u stream. Iz streama ฤ‡e se redak zatim zapisati u datoteku.
  3. Zatim zatvaramo pisaฤ toka nakon pisanja u datoteku. Obiฤno je dobra praksa zatvoriti rukovatelje datotekama kada datoteka viลกe nije potrebna za pisanje.
  4. Konaฤno, ponovno ฤitamo sadrลพaj datoteke i upisujemo je u dnevnik konzole. Ovo sluลพi da se provjeri je li redak upisan u datoteku.

Kada se gornji kod postavi i projekt se pokrene pomoฤ‡u Visual Studija, dobit ฤ‡ete donji izlaz.

Izlaz:-

Potok Writer

Iz izlaza moลพete vidjeti da je redak "Guru"99 โ€“ ASP.Net" je uspjeลกno dodan u datoteku. Sva 3 retka teksta mogu se vidjeti u konzoli.

Pitanja i odgovori

Stream je meฤ‘usloj izmeฤ‘u aplikacije i datoteke. Razbija velike datoteke na male dijelove tako da se podaci mogu ฤitati ili pisati bez uฤitavanja cijele datoteke u memoriju.

StreamReader ฤita tekstualne podatke iz datoteke putem streama. Datoteka.OpenText vraฤ‡a StreamReader, a njegova metoda ReadLine ฤita datoteku redak po redak.

PotokWriter zapisuje tekstualne podatke u datoteku putem streama. File.AppendText vraฤ‡a StreamWriter, a njegova metoda WriteLine ลกalje svaki redak u datoteku.

Uobiฤajeni streamovi ukljuฤuju FileStream za datoteke, MemoryStream za podatke u memoriji, BufferedStream za meฤ‘uspremnik i NetworkStream za utiฤnice. Svi su izvedeni iz abstracKlasa streama.

FileStream ฤita i zapisuje sirove bajtove u datoteku, dok StreamReader omotava stream kako bi ฤitao tekst kao znakove i retke. StreamReader je jednostavniji za tekstualne datoteke.

AI asistenti poput GitHub Copilot autocomplete StreamReader i StreamWriter kod, dodajte blokove za odlaganje i generirajte petlje za ฤitanje datoteka iz kratkog komentara.

Da. Alati pokretani umjetnom inteligencijom generiraju metode ฤitanja i pisanja u streamu, predlaลพu meฤ‘uspremnik za velike datoteke i dodaju naredbe using kako bi se streamovi sigurno zatvorili.

Naredba using automatski zatvara i uklanja stream kada se blok zavrลกi, ฤak i ako doฤ‘e do pogreลกke. To oslobaฤ‘a identifikator datoteke i sprjeฤava curenje resursa.

Saลพmite ovu objavu uz: