Поток в C# Урок: StreamReader & StreamWriter [Пример]
Какво е C# поток?
При файловите операции на C# обикновено потоците се използват за четене и запис във файлове. Потокът е допълнителен слой, създаден между приложение и файл. Потокът се използва за осигуряване на плавни операции за четене и запис във файла.
Потоците обикновено се използват при четене на данни от големи файлове. Чрез използването на потоци данните от големи файлове се разбиват на малки парчета и се изпращат към потока. След това тези части от данни могат да бъдат прочетени от приложението.
Причината за разделянето му на малки части е поради въздействието върху производителността от четенето на голям файл наведнъж. Ако трябваше да прочетете данните от, да речем, файл от 100 MB наведнъж, вашето приложение може просто да увисне и да стане нестабилно. Най-добрият подход тогава е да използвате потоци, за да разделите файла на управляеми парчета.
Така че, когато се извършва операция за запис във файл, данните, които трябва да бъдат записани, първо се записват в потока. След това от потока данните се записват във файла. Същото важи и за операцията за четене. При операцията за четене данните първо се прехвърлят от файла към потока. След това данните се четат от приложението чрез потока. Нека да разгледаме пример за това как можем да четем и пишем с помощта на потоци.
Четец на потоци
Четецът на потоци се използва за четене на данни от файл с помощта на потоци. Данните от файла първо се четат в потока. След това приложението чете данните от потока.
За нашия пример ще приемем, че имаме файл в D устройството, наречен Example.txt. Файлът ще бъде обикновен текстов файл и ще има 2 реда, както е показано по-долу
- Guru99 – .Net
- Guru99 -C#
За нашия пример ще създадем просто конзолно приложение и ще работим с файлови потоци
Нека да разгледаме пример за това как можем да използваме потоци за четене на данни от файл. Въведете кода по-долу във файла 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(); } } }
Обяснение на кода:-
- Първо, ние декларираме обект за четене на поток. Обектът за четене на потоци се използва в C# за дефиниране на поток от файла към приложението. Данните ще бъдат прехвърлени от файла към потока всеки път, когато данните се четат от файла. Файлът.OpenText се използва за отваряне на файла “Example.txt” в режим само за четене. След това манипулаторът на файла се изпраща към обекта за четене на поток.
- След това дефинираме временна променлива 's', която ще се използва за четене на всички данни от файла.
- След това използваме метода ReadLine за четене на поток, за да прочетем всеки ред от буфера на потока. Когато изпълняваме това операция, всеки ред първо ще бъде прехвърлен от файла към буфера. След това низовата линия ще бъде прехвърлена от буфера към променливата 's'. След това записваме съдържанието на низа 's' в конзолата.
Когато горният код е зададен и проектът се изпълнява с помощта на Visual Studio, ще получите резултата по-долу.
Изход: -
От изхода можете да видите, че Stream Reader е прочел и двата реда от файла. Накрая редовете на прочетения от потока низ бяха изпратени до конзолата.
Поток писател
Устройството за писане на потоци се използва за запис на данни във файл с помощта на потоци. Данните от приложението първо се записват в потока. След това потокът записва данните във файла. Нека да разгледаме пример за това как можем да използваме потоци за запис на данни от файл. Въведете кода по-долу във файла 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(); } } }
Обяснение на кода:-
- Първо, ние декларираме обект за писане на поток. Обектът за писане на поток се използва в C# за дефиниране на поток. След това потокът се използва за запис на данни от приложението във файла. Данните ще бъдат изтласкани от приложението към потока, когато трябва да се запишат данни. Командата File.AppendText се използва за отваряне на файла "Example.txt" в режим на добавяне. След това манипулаторът на файла се изпраща към обекта за запис на поток.
- Използваме метода за запис на поток Writeline, за да напишем реда „Guru99 – ASP.Net“ в потока. След това от потока редът ще бъде записан във файла.
- След това затваряме записващия поток след запис във файла. Обикновено е добра практика да затворите манипулаторите на файлове, когато файлът вече не е необходим за писане.
- Накрая четем отново съдържанието на файла и го записваме в конзолния журнал. Това е, за да се провери дали редът е записан във файла.
Когато горният код е зададен и проектът се изпълнява с помощта на Visual Studio, ще получите изхода по-долу.
Изход: -
От изхода можете да видите, че редът „Guru99 – ASP.Net“ е добавен успешно към файла. Всичките 3 реда текст могат да се видят в конзолата.
Oбобщение
- Потоците се използват като междинно ниво между приложението и файла.
- StreamReader се използва винаги, когато е необходимо данните да бъдат прочетени от файл.
- Streamwriter се използва винаги, когато трябва да се запишат данни във файл.