Учебное пособие по потоку в C#: StreamReader и StreamWriter [Пример]

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

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

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

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

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

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

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

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

  • Гуру99 – .Net
  • Гуру99 -С#

В нашем примере мы создадим простое консольное приложение и будем работать с файловыми потоками.

Давайте рассмотрим пример того, как мы можем использовать потоки для чтения данных из файла. Введите приведенный ниже код в файл 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();
  }
 }
}

Объяснение кода: -

  1. Сначала мы объявляем объект чтения потока. Объект чтения потока используется в C# для определения потока из файла в приложение. Данные будут передаваться из файла в поток всякий раз, когда данные читаются из файла. Файл.OpenText используется для открытия файла «Example.txt» в режиме только для чтения. Обработчик файла затем отправляется объекту чтения потока.
  2. Далее мы определяем временную переменную «s», которая будет использоваться для чтения всех данных из файла.
  3. Затем мы используем метод чтения потока 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();
  }
 }
}

Объяснение кода: -

  1. Сначала мы объявляем объект записи потока. Объект записи потока используется в C# для определения потока. Затем поток используется для записи данных из приложения в файл. Данные будут передаваться из приложения в поток всякий раз, когда данные необходимо записать. Команда File.AppendText используется для открытия файла «Example.txt» в режиме добавления. Обработчик файла затем отправляется объекту записи потока.
  2. Мы используем метод записи потока Writeline для записи в поток строки «Guru99 – ASP.Net». Из потока строка будет записана в файл.
  3. Затем мы закрываем средство записи потока после записи в файл. Обычно хорошей практикой является закрытие обработчиков файлов, когда файл больше не требуется для записи.
  4. Наконец, мы снова читаем содержимое файла и записываем его в журнал консоли. Это проверка того, была ли строка записана в файл.

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

Выход:-

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

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

Резюме

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