Потоковий код у C#: StreamReader та StreamWriter [Приклад]
⚡ Розумний підсумок
Потік AC# — це проміжок між вашою програмою та файлом, який дозволяє читати або записувати дані невеликими порціями. Тут ви дізнаєтесь, як працюють StreamReader та Stream.Writer робота з прикладами та основними типами потоків.

Що таке C# Stream?
У файлових операціях C# зазвичай потоки використовуються для читання та запису файлів. Потік — це додатковий рівень, створений між програмою та файлом. Потік використовується для забезпечення плавного читання та запису у файл.
Потоки зазвичай використовуються під час читання даних із великих файлів. За допомогою потоків дані з великих файлів розбиваються на невеликі фрагменти та надсилаються в потік. Потім ці фрагменти даних можна прочитати з програми.
Причиною розбиття його на невеликі частини є вплив читання великого файлу за один раз на продуктивність. Якщо ви прочитаєте дані, скажімо, із файлу розміром 100 Мб за один раз, ваша програма може просто зависнути та стати нестабільною. Тоді найкращим підходом є використання потоків для розбиття файлу на керовані частини.
Отже, коли операція запису виконується у файл, дані, які потрібно записати, спочатку записуються в потік. Потім дані з потоку записуються у файл. Те саме стосується операції читання. Під час операції читання дані спочатку передаються з файлу в потік. Потім дані зчитуються з програми через потік. Давайте розглянемо приклад того, як ми можемо читати та писати за допомогою потоків.
Типи потоків у C#
Усі потокові класи в C# походять від abstract Stream клас в System.IO простір імен. Кожен тип орієнтований на різне джерело даних, але використовує ті самі методи читання та запису. Найчастіше використовувані потоки перелічені нижче.
- FileStream зчитує та записує у файли на диску, по одному байту або блоку за раз.
- Потік пам'яті зберігає дані в пам'яті, а не у файлі, що корисно для тимчасових буферів.
- BufferedStream обгортає ще один потік, щоб зменшити кількість повільних операцій з диском або мережею.
- Мережевий потік надсилає та отримує дані через мережевий сокет.
Для роботи з текстом C# надає StreamReader та StreamWriter допоміжні класи, які обгортають потік і розглядаються в наступних розділах.
Читач потоків
Зчитувач потоків використовується для читання даних із файлу за допомогою потоків. Дані з файлу спочатку зчитуються в потік. Після цього програма зчитує дані з потоку.
Для нашого прикладу ми припустимо, що у нас є файл на диску D під назвою Example.txt. Файл буде простим текстовим і матиме 2 рядки, як показано нижче
- Guru99 – .Net
- Guru99 -До-ді-джей
Для нашого прикладу ми створимо просту консольну програму та працюватимемо з потоками файлів
Давайте розглянемо приклад того, як ми можемо використовувати потоки для читання даних із файлу. Введіть наведений нижче код у файл 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 Пояснення:
- По-перше, ми оголошуємо об’єкт читача потоку. Об’єкт читання потоку використовується в C# для визначення потоку від файлу до програми. Дані надсилатимуться з файлу в потік кожного разу, коли дані зчитуються з файлу. Файл.OpenText використовується для відкриття файлу «Example.txt» у режимі лише для читання. Потім обробник файлу надсилається до об’єкта читача потоку.
- Далі ми визначаємо тимчасову змінну 's', яка використовуватиметься для читання всіх даних із файлу.
- Потім ми використовуємо метод читання потоку ReadLine для читання кожного рядка з буфера потоку. Коли ми виконуємо це операція, кожен рядок спочатку буде перенесено з файлу в буфер. Тоді рядок рядка буде передано з буфера до змінної 's'. Потім ми записуємо вміст рядка 's' на консоль.
Коли наведений вище код встановлено, а проект запускається за допомогою Visual Studio, ви отримаєте наведений нижче результат.
Вихід:-
З результату ви можете побачити, що Stream Reader прочитав обидва рядки з файлу. Нарешті, рядки рядка, прочитаного з потоку, були відправлені на консоль.
потік Writer
Потоковий записувач використовується для запису даних у файл за допомогою потоків. Дані з програми спочатку записуються в потік. Після цього потік записує дані у файл. Давайте розглянемо приклад того, як ми можемо використовувати потоки для запису даних із файлу. Введіть наведений нижче код у файл 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 Пояснення:
- По-перше, ми оголошуємо об’єкт запису потоку. Об’єкт запису потоку використовується в C# для визначення потоку. Потім потік використовується для запису даних із програми у файл. Дані надсилатимуться з програми в потік кожного разу, коли потрібно буде записати дані. Команда File.AppendText використовується для відкриття файлу «Example.txt» у режимі додавання. Потім обробник файлу надсилається об’єкту потокового запису.
- Ми використовуємо метод потокового запису Writeline для запису рядка «Guru99 – ASP.Net” до потоку. З потоку рядок потім буде записано у файл.
- Потім ми закриваємо записувач потоку після запису у файл. Зазвичай добре закривати обробники файлів, коли файл більше не потрібен для запису.
- Нарешті, ми знову читаємо вміст файлу та записуємо його в журнал консолі. Це робиться для того, щоб перевірити, чи був записаний рядок у файл.
Коли наведений вище код встановлено та проект запущено за допомогою Visual Studio, ви отримаєте наведений нижче результат.
Вихід:-
З виводу видно, що рядок «Guru«99 – ASP.Net» було успішно додано до файлу. Усі 3 рядки тексту можна побачити в консолі.




