Потоковая обработка данных в C#: StreamReader и StreamWriter [Пример]

⚡ Умное резюме

AC# stream — это промежуточный слой между вашим приложением и файлом, позволяющий читать или записывать данные небольшими порциями. Здесь вы узнаете, как работают StreamReader и Stream.Writer работа, с примерами и основными типами.

  • 🌊 Что это: Поток — это промежуточный слой между вашим приложением и файлом.
  • ???? СтримРидер: StreamReader считывает текст из файла построчно или по частям.
  • ✍️ ПотокWriter: ПотокWriter Записывает текст в файл через поток.
  • 🧩 Типы потоков: FileStream, MemoryStream и BufferВсе классы edStream наследуются от класса Stream.
  • 🤖 Помощь ИИ: Инструменты искусственного интеллекта, такие как GitHub Copilot, мгновенно генерируют потоковый код на C#.

C# Stream Reader и Writer

Что такое поток C#?

В файловых операциях C# потоки обычно используются для чтения и записи файлов. Поток — это дополнительный слой, создаваемый между приложением и файлом. Поток используется для обеспечения плавных операций чтения и записи в файл.

Потоки обычно используются при чтении данных из больших файлов. При использовании потоков данные из больших файлов разбиваются на небольшие фрагменты и отправляются в поток. Эти фрагменты данных затем можно прочитать из приложения.

Причина разбиения его на небольшие фрагменты заключается в том, что чтение большого файла за один раз влияет на производительность. Если бы вы прочитали данные, скажем, из файла размером 100 МБ за один раз, ваше приложение могло бы просто зависнуть и стать нестабильным. В таком случае лучший подход — использовать потоки для разбиения файла на управляемые фрагменты.

Таким образом, когда в файл выполняется операция записи, данные, подлежащие записи, сначала записываются в поток. Затем данные из потока записываются в файл. То же самое касается и операции чтения. При операции чтения данные сначала передаются из файла в поток. Затем данные считываются из приложения через поток. Давайте посмотрим на пример того, как мы можем читать и писать с помощью потоков.

Типы потоков в C#

Все классы потоков в C# наследуются от класса abs.tract Stream класс в System.IO Пространство имен. Каждый тип ориентирован на разный источник данных, но использует одни и те же методы чтения и записи. Ниже перечислены наиболее часто используемые потоки.

  • Файловый поток Программа считывает данные из файлов на диске и записывает в них по одному байту или блоку за раз.
  • Памятьпоток хранит данные в памяти, а не в файле, что удобно для временных буферов.
  • BufferedStream Оборачивает другой поток данных для уменьшения количества медленных операций с диском или сетью.
  • Сетевой поток Отправляет и принимает данные через сетевой сокет.

Для работы с текстом C# предоставляет следующие возможности StreamReader и StreamWriter Вспомогательные классы, которые охватывают поток данных, рассматриваются в следующих разделах.

Потоковый читатель

Устройство чтения потоков используется для чтения данных из файла с помощью потоков. Данные из файла сначала считываются в поток. После этого приложение считывает данные из потока.

В нашем примере мы предположим, что на диске D у нас есть файл с именем example.txt. Файл будет простым текстовым файлом и будет состоять из двух строк, как показано ниже.

  • 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();
  }
 }
}

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

Из результатов видно, что строка «Guru99 – ASP.Net” успешно добавлено в файл. Все 3 строки текста видны в консоли.

Часто задаваемые вопросы (FAQ)

Поток — это промежуточный слой между приложением и файлом. Он разбивает большие файлы на небольшие фрагменты, позволяя читать или записывать данные без загрузки всего файла в память.

StreamReader считывает текстовые данные из файла через поток. File.OpenText Возвращает объект StreamReader, а его метод ReadLine считывает файл построчно.

ПотокWriter Записывает текстовые данные в файл через поток. Метод File.AppendText возвращает объект Stream.Writer, а его метод WriteLine отправляет каждую строку в файл.

К распространённым типам потоков относятся FileStream для файлов и MemoryStream для данных, хранящихся в оперативной памяти. BufferedStream используется для буферизации, а NetworkStream — для сокетов. Все они являются производными от abs.tracКласс t Stream.

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

Искусственный интеллект-помощники, такие как GitHub Copilot, автоматически дополняют код StreamReader и Stream.Writer Добавьте в код блоки using для освобождения ресурсов и сгенерируйте циклы чтения файлов из короткого комментария.

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

Оператор `using` автоматически закрывает и освобождает поток по завершении блока, даже если возникает ошибка. Это освобождает дескриптор файла и предотвращает утечки ресурсов.

Подведем итог этой публикации следующим образом: