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 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.
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:-
- 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.
- Zatim definiramo privremenu varijablu 's' koja ฤe se koristiti za ฤitanje svih podataka iz datoteke.
- 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:-
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.
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:-
- 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.
- Koristimo metodu pisanja u streamu Writeline za pisanje retka "Guru99 โ ASP.Netโ u stream. Iz streama ฤe se redak zatim zapisati u datoteku.
- Zatim zatvaramo pisaฤ toka nakon pisanja u datoteku. Obiฤno je dobra praksa zatvoriti rukovatelje datotekama kada datoteka viลกe nije potrebna za pisanje.
- 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:-
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.




