Поточно предаване в C#: StreamReader и StreamWriter [Пример]

⚡ Умно обобщение

AC# потокът е слой между вашето приложение и файл, който ви позволява да четете или записвате данни на малки парчета. Тук ще научите как StreamReader и Stream...Writer работа, с примери и основни видове потоци.

  • ???? Какво е: Потокът е междинен слой между вашето приложение и файл.
  • 📖 Четец на потоци: StreamReader чете текст от файл, ред по ред или част.
  • ✍️ ПотокWriter: ПотокWriter записва текст във файл чрез поток.
  • 🧩 Видове потоци: FileStream, MemoryStream и BufferВсички edStream произлизат от класа Stream.
  • 🤖 Помощ с изкуствен интелект: Инструменти с изкуствен интелект като GitHub Copilot генерират C# стрийминг код мигновено.

C# четец на потоци и Writer

Какво е C# поток?

При файловите операции на C# обикновено потоците се използват за четене и запис във файлове. Потокът е допълнителен слой, създаден между приложение и файл. Потокът се използва за осигуряване на плавни операции за четене и запис във файла.

Потоците обикновено се използват при четене на данни от големи файлове. Чрез използването на потоци данните от големи файлове се разбиват на малки парчета и се изпращат към потока. След това тези части от данни могат да бъдат прочетени от приложението.

Причината за разделянето му на малки части е поради въздействието върху производителността от четенето на голям файл наведнъж. Ако трябваше да прочетете данните от, да речем, файл от 100 MB наведнъж, вашето приложение може просто да увисне и да стане нестабилно. Най-добрият подход тогава е да използвате потоци, за да разделите файла на управляеми парчета.

Така че, когато се извършва операция за запис във файл, данните, които трябва да бъдат записани, първо се записват в потока. След това от потока данните се записват във файла. Същото важи и за операцията за четене. При операцията за четене данните първо се прехвърлят от файла към потока. След това данните се четат от приложението чрез потока. Нека да разгледаме пример за това как можем да четем и пишем с помощта на потоци.

Видове потоци в C#

Всички класове потоци в C# произлизат от abstract Stream клас в System.IO пространство от имена. Всеки тип е насочен към различен източник на данни, но споделя едни и същи методи за четене и запис. Най-често използваните потоци са изброени по-долу.

  • FileStream чете от и записва във файлове на диска, по един байт или блок наведнъж.
  • MemoryStream съхранява данни в паметта, вместо във файл, което е полезно за временни буфери.
  • 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 чете текстови данни от файл чрез поток. File.OpenText връща StreamReader, а методът му ReadLine чете файла ред по ред.

ПотокWriter записва текстови данни във файл чрез поток. File.AppendText връща поток (Stream).Writer, а методът му WriteLine изпраща всеки ред към файла.

Често срещаните потоци включват FileStream за файлове, MemoryStream за данни в паметта, BufferedStream за буфериране и NetworkStream за сокети. Всички произлизат от abstracКлас t Stream.

FileStream чете и записва сурови байтове във файл, докато StreamReader обгръща потока, за да чете текста като символи и редове. StreamReader е по-лесен за текстови файлове.

AI асистенти като GitHub Copilot, автоматично довършване, StreamReader и StreamWriter код, добавяне на блокове за изхвърляне и генериране на цикли за четене на файлове от кратък коментар.

Да. Инструментите, задвижвани от изкуствен интелект, генерират методи за четене и запис на потоци, предлагат буфериране за големи файлове и добавят using оператори, така че потоците да се затварят безопасно.

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

Обобщете тази публикация с: