Потоковий код у C#: StreamReader та StreamWriter [Приклад]

⚡ Розумний підсумок

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

  • ???? Що це: Потік — це проміжний шар між вашою програмою та файлом.
  • ???? Зчитувач потоку: StreamReader зчитує текст з файлу по рядках або фрагментах за раз.
  • ✍️ потікWriter: потікWriter записує текст у файл через потік.
  • 🧩 Типи потоків: FileStream, MemoryStream та BufferУсі edStream походять від класу Stream.
  • 🤖 Допомога ШІ: Інструменти штучного інтелекту, такі як GitHub Copilot, миттєво генерують потоковий код C#.

Зчитувач потоків C# та 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 Пояснення:

  1. По-перше, ми оголошуємо об’єкт читача потоку. Об’єкт читання потоку використовується в C# для визначення потоку від файлу до програми. Дані надсилатимуться з файлу в потік кожного разу, коли дані зчитуються з файлу. Файл.OpenText використовується для відкриття файлу «Example.txt» у режимі лише для читання. Потім обробник файлу надсилається до об’єкта читача потоку.
  2. Далі ми визначаємо тимчасову змінну 's', яка використовуватиметься для читання всіх даних із файлу.
  3. Потім ми використовуємо метод читання потоку ReadLine для читання кожного рядка з буфера потоку. Коли ми виконуємо це операція, кожен рядок спочатку буде перенесено з файлу в буфер. Тоді рядок рядка буде передано з буфера до змінної 's'. Потім ми записуємо вміст рядка 's' на консоль.

Коли наведений вище код встановлено, а проект запускається за допомогою Visual Studio, ви отримаєте наведений нижче результат.

Вихід:-

Читач потоків

З результату ви можете побачити, що Stream Reader прочитав обидва рядки з файлу. Нарешті, рядки рядка, прочитаного з потоку, були відправлені на консоль.

потік Writer

Потоковий записувач використовується для запису даних у файл за допомогою потоків. Дані з програми спочатку записуються в потік. Після цього потік записує дані у файл. Давайте розглянемо приклад того, як ми можемо використовувати потоки для запису даних із файлу. Введіть наведений нижче код у файл program.cs.

потік 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 Пояснення:

  1. По-перше, ми оголошуємо об’єкт запису потоку. Об’єкт запису потоку використовується в C# для визначення потоку. Потім потік використовується для запису даних із програми у файл. Дані надсилатимуться з програми в потік кожного разу, коли потрібно буде записати дані. Команда File.AppendText використовується для відкриття файлу «Example.txt» у режимі додавання. Потім обробник файлу надсилається об’єкту потокового запису.
  2. Ми використовуємо метод потокового запису Writeline для запису рядка «Guru99 – ASP.Net” до потоку. З потоку рядок потім буде записано у файл.
  3. Потім ми закриваємо записувач потоку після запису у файл. Зазвичай добре закривати обробники файлів, коли файл більше не потрібен для запису.
  4. Нарешті, ми знову читаємо вміст файлу та записуємо його в журнал консолі. Це робиться для того, щоб перевірити, чи був записаний рядок у файл.

Коли наведений вище код встановлено та проект запущено за допомогою Visual Studio, ви отримаєте наведений нижче результат.

Вихід:-

потік Writer

З виводу видно, що рядок «Guru«99 – ASP.Net» було успішно додано до файлу. Усі 3 рядки тексту можна побачити в консолі.

Поширені запитання

Потік – це проміжний рівень між програмою та файлом. Він розбиває великі файли на невеликі фрагменти, щоб дані можна було зчитувати або записувати, не завантажуючи весь файл у пам'ять.

StreamReader зчитує текстові дані з файлу через потік. Файл.OpenText повертає StreamReader, а його метод ReadLine зчитує файл по рядках за раз.

потікWriter записує текстові дані у файл через потік. File.AppendText повертає потік.Writer, а його метод WriteLine надсилає кожен рядок до файлу.

До поширених потоків належать FileStream для файлів, MemoryStream для даних у пам'яті, BufferedStream для буферизації та NetworkStream для сокетів. Усі вони походять від abstracКлас потоку t.

FileStream зчитує та записує необроблені байти у файл, тоді як StreamReader обгортає потік, щоб зчитувати текст як символи та рядки. StreamReader простіший для текстових файлів.

Помічники штучного інтелекту, такі як автозаповнення GitHub Copilot, StreamReader та StreamWriter код, додавати блоки using для утилізації та генерувати цикли читання файлів з короткого коментаря.

Так. Інструменти на базі штучного інтелекту генерують методи читання та запису потоків, пропонують буферизацію для великих файлів та додають оператори using для безпечного закриття потоків.

Оператор using автоматично закриває та видаляє потік після завершення блоку, навіть якщо виникає помилка. Це звільняє дескриптор файлу та запобігає витоку ресурсів.

Підсумуйте цей пост за допомогою: