Dominando File Streams em C#: StreamReader e StreamWriter – Guia Passo a Passo
Em I/O de arquivo C#, streams servem como intermediários entre sua aplicação e o sistema de arquivos subjacente. Eles permitem ler ou escrever arquivos de forma eficiente em memória, especialmente ao lidar com grandes conjuntos de dados.
Em vez de carregar um arquivo inteiro de 100 MB na memória — o que pode travar seu app — streams quebram os dados em pedaços gerenciáveis. Esta abordagem mantém performance suave e previne crashes.
Abaixo você encontrará exemplos concisos demonstrando como ler e escrever arquivos usando StreamReader e StreamWriter. Siga as instruções passo a passo para integrar esses padrões em seus próprios projetos.
StreamReader – Lendo Arquivos
A classe StreamReader lê texto de um arquivo uma linha por vez, passando os dados através de um buffer antes que sua aplicação os processe.
Assuma que você tem um arquivo chamado Example.txt no drive D contendo duas linhas:
- Guru99 – .Net
- Guru99 – C#
Crie uma aplicação console e adicione o seguinte código ao 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();
}
}
}
Explicação:
- Instanciar
StreamReadercomFile.OpenText, abrindo o arquivo em modo somente leitura. - Ler cada linha com
ReadLine(), que transfere dados do arquivo para o buffer e então para a variávelline. - Exibir cada linha no console.
Executar este programa no Visual Studio exibe:

As duas linhas de Example.txt aparecem corretamente, provando que o reader funciona como pretendido.
StreamWriter – Escrevendo em Arquivos
Por outro lado, StreamWriter escreve texto da sua aplicação para um arquivo via buffer. Abaixo está um exemplo simples que anexa uma linha ao mesmo arquivo 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();
}
}
}
Explicação:
- Instanciar
StreamWritercomFile.AppendText, abrindo o arquivo em modo append. - Escrever uma nova linha usando
WriteLine(), que empurra o texto para o buffer e então para o arquivo. - Fechar o writer automaticamente via bloco
using. - Ler todo o conteúdo do arquivo com
File.ReadAllTextpara confirmar a operação de escrita.
Executar este programa mostra:

O console exibe todas as três linhas, confirmando que a nova entrada foi anexada com sucesso.
Principais Conclusões
- Streams desacoplam I/O de arquivo da lógica da aplicação, permitindo manipulação eficiente de arquivos grandes.
- Use
StreamReaderpara ler texto linha por linha. - Use
StreamWriterpara escrever ou anexar texto, garantindo fechar o stream para liberar handles de arquivo.
Linguagem C
- Laços For em C++ Explicados: Sintaxe, Fluxo e Exemplos Práticos
- Dominando Switch-Case em C++: Sintaxe, Uso e Exemplos Práticos
- Dominando Alocação Dinâmica de Arrays em C++: Guia Prático com Exemplos de Código
- Dominando Streams em C++: cout, cin, cerr, clog – Guia Prático
- Dominando std::stack em C++: Guia Completo com Exemplos Práticos
- Structs em C++ Explicadas com Exemplo Prático
- Dominando std::list em C++: Sintaxe, Funções e Exemplos Práticos
- Classes Abstratas em C#: Tutorial Prático com Exemplos de Código
- Dominando Collections em C#: Tutorial Prático com Exemplos do Mundo Real
- Lendo Arquivos em Java com BufferedReader – Guia Prático com Exemplos