Stream in C# oktatóanyag: StreamReader és StreamWriter [Példa]
Mi az a C# Stream?
A C# fájlműveletekben általában a streameket használják a fájlok olvasására és írására. A folyam egy további réteg, amely egy alkalmazás és egy fájl között jön létre. Az adatfolyamot a fájl zökkenőmentes olvasási és írási műveleteinek biztosítására használják.
Az adatfolyamokat általában nagy fájlok olvasásakor használják. Az adatfolyamok használatával a nagy fájlok adatait kis darabokra bontják, és elküldik az adatfolyamba. Ezek az adattömbök ezután kiolvashatók az alkalmazásból.
A kis darabokra bontás oka az, hogy egy nagy fájl egy lépésben történő kiolvasása hatással van a teljesítményre. Ha mondjuk egy 100 MB-os fájlból olvasná az adatokat egyszerre, az alkalmazás lefagyhat és instabillá válhat. A legjobb megoldás az, ha adatfolyamokat használ a fájl kezelhető darabokra bontására.
Tehát amikor írási műveletet hajtanak végre a fájlon, az írandó adatok először az adatfolyamba kerülnek. Az adatfolyamból ezután az adatok a fájlba íródnak. Ugyanez vonatkozik az olvasási műveletre is. Az olvasási művelet során az adatok először a fájlból a folyamba kerülnek. Az adatok ezután az adatfolyamon keresztül kerülnek kiolvasásra az alkalmazásból. Nézzünk egy példát arra, hogyan tudunk olvasni és írni folyamok segítségével.
Streamolvasó
Az adatfolyam-olvasó egy fájlból adatfolyamok segítségével olvassa be az adatokat. A fájlból származó adatok először beolvasásra kerülnek az adatfolyamba. Ezt követően az alkalmazás beolvassa az adatokat a folyamból.
Példánkban feltételezzük, hogy a D meghajtón van egy Példa.txt nevű fájlunk. A fájl egy egyszerű szövegfájl lesz, és 2 sorból áll, az alábbiak szerint
- Guru99 – .Net
- Guru99 -C#
Példánkban egy egyszerű konzolalkalmazást fogunk létrehozni, és a fájlfolyamokkal fogunk dolgozni
Nézzünk egy példát arra, hogyan használhatunk adatfolyamokat egy fájlból adatok olvasására. Írja be az alábbi kódot a program.cs fájlba.
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(); } } }
Kód magyarázata: -
- Először deklarálunk egy adatfolyam-olvasó objektumot. A streamolvasó objektumot a C# nyelvben a fájlból az alkalmazásba irányuló adatfolyam meghatározására használják. Az adatok a fájlból az adatfolyamba kerülnek, valahányszor adatot olvasnak be a fájlból. A fájl.OpenText az „Example.txt” fájl csak olvasható módban való megnyitására szolgál. A fájl kezelője ezután elküldésre kerül a folyamolvasó objektumnak.
- Ezután meghatározunk egy ideiglenes 's' változót, amely a fájl összes adatának kiolvasására szolgál.
- Ezután a ReadLine adatfolyam-olvasó metódussal olvassuk be az egyes sorokat az adatfolyam pufferből. Amikor ezt végrehajtjuk működés, minden sor először átkerül a fájlból a pufferbe. Ezután a karakterlánc átkerül a pufferből az 's' változóba. Ezután beírjuk az 's' karakterlánc tartalmát a konzolba.
Ha a fenti kód be van állítva, és a projekt a használatával fut Visual Studio, akkor az alábbi kimenetet kapja.
Kimenet:-
A kimenetből láthatja, hogy a Stream Reader mindkét sort beolvassa a fájlból. Végül a folyamból kiolvasott karakterlánc sorai elküldésre kerültek a konzolra.
Stream Writer
Az adatfolyam-írót arra használják, hogy adatfolyamok segítségével adatokat írjanak egy fájlba. Az alkalmazásból származó adatok először az adatfolyamba kerülnek. Ezután a stream az adatokat a fájlba írja. Nézzünk egy példát arra, hogyan használhatunk adatfolyamokat fájlból adatok írására. Írja be az alábbi kódot a program.cs fájlba.
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(); } } }
Kód magyarázata: -
- Először deklarálunk egy adatfolyam-író objektumot. A stream writer objektumot a C# használja egy adatfolyam meghatározására. Az adatfolyamot ezután az alkalmazásból a fájlba írják. Az adatok az alkalmazásból a streambe kerülnek, amikor adatokat kell írni. A File.AppendText paranccsal nyitható meg az „Example.txt” fájl hozzáfűzési módban. A fájl kezelője ezután elküldésre kerül a folyamíró objektumnak.
- A Writeline adatfolyam írási módszert használjuk a „Guru99 – ASP.Net” sor írásához a folyamba. A folyamból a sor ezután a fájlba kerül.
- Ezután bezárjuk a stream-írót a fájlba írás után. Általában jó gyakorlat a fájlkezelők bezárása, amikor a fájlra már nincs szükség írási célokra.
- Végül újra elolvassuk a fájl tartalmát, és beírjuk a konzolnaplóba. Ez annak ellenőrzésére szolgál, hogy a sort a fájlba írták-e.
Ha a fenti kód be van állítva, és a projekt a Visual Studio használatával fut, az alábbi kimenetet kapja.
Kimenet:-
A kimeneten látható, hogy a „Guru99 – ASP.Net” sort sikeresen hozzáadtuk a fájlhoz. Mind a 3 sornyi szöveg látható a konzolon.
Összegzésként
- Az adatfolyamok köztes szintként szolgálnak az alkalmazás és a fájl között.
- A StreamReader akkor használatos, amikor egy fájlból adatokat kell olvasni.
- A Streamwriter akkor használatos, amikor adatokat kell fájlba írni.