Потоки файлов в C#: StreamReader и StreamWriter — пошаговое руководство
В C# файловый ввод-вывод потоки служат посредником между вашим приложением и файловой системой. Они позволяют читать из файлов или писать в них память-еффективным способом, особенно при работе с большими объёмами данных.
Вместо загрузки всего 100 МБ файла в память — что может вызвать зависание приложения — потоки разбивают данные на управляемые фрагменты. Этот подход сохраняет плавную производительность и предотвращает краши.
Ниже вы найдёте краткие примеры, демонстрирующие чтение и запись файлов с использованием StreamReader и StreamWriter. Следуйте пошаговым инструкциям, чтобы интегрировать эти паттерны в свои проекты.
StreamReader — чтение файлов
Класс StreamReader читает текст из файла построчно, передавая данные через буфер перед обработкой приложением.
Предположим, у вас есть файл Example.txt на диске D со следующими двумя строками:
- Guru99 – .Net
- Guru99 – C#
Создайте консольное приложение и добавьте следующий код в Program.cs:

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamReader sr = File.OpenText(path)) {
string line;
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
Console.ReadKey();
}
}
}
Пояснение:
- Инстанцируем
StreamReaderчерезFile.OpenText, открывая файл в режиме только чтения. - Читаем каждую строку с
ReadLine(), которая передаёт данные из файла в буфер, а затем в переменнуюline. - Выводим каждую строку в консоль.
Запуск этой программы в Visual Studio показывает:

Две строки из Example.txt отображаются корректно, подтверждая работу ридера.
StreamWriter — запись в файлы
Наоборот, StreamWriter пишет текст из вашего приложения в файл через буфер. Ниже простой пример, добавляющий строку в тот же файл Example.txt.

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamWriter sw = File.AppendText(path)) {
sw.WriteLine("Guru99 – ASP.Net");
}
Console.WriteLine(File.ReadAllText(path));
Console.ReadKey();
}
}
}
Пояснение:
- Инстанцируем
StreamWriterчерезFile.AppendText, открывая файл в режиме дозаписи. - Записываем новую строку с
WriteLine(), что помещает текст в буфер, а затем в файл. - Автоматически закрываем writer через блок
using. - Читаем всё содержимое файла с
File.ReadAllTextдля подтверждения операции записи.
Выполнение программы показывает:

Консоль отображает все три строки, подтверждая, что новая запись успешно дозаписана.
Ключевые выводы
- Потоки отделяют файловый ввод-вывод от логики приложения, позволяя эффективно обрабатывать большие файлы.
- Используйте
StreamReaderдля построчного чтения текста. - Используйте
StreamWriterдля записи или дозаписи текста, обеспечивая закрытие потока для освобождения дескрипторов файлов.
Язык C
- Цикл for в C++: синтаксис, принцип работы и практические примеры
- Оператор switch-case в C++: синтаксис, применение и практические примеры
- Динамическое выделение массивов в C++: практическое руководство с примерами кода
- Потоки в C++: cout, cin, cerr, clog — практическое руководство
- std::stack в C++: полное руководство с практическими примерами
- Структуры (struct) в C++: объяснение с практическим примером
- Освоение std::list в C++: синтаксис, функции и практические примеры
- Абстрактные классы в C#: практическое руководство с примерами кода
- Коллекции в C#: практическое руководство с реальными примерами
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами