Tutorial de fluxo em C#: StreamReader e StreamWriter [exemplo]
O que é fluxo C#?
Nas operações de arquivo C#, normalmente os fluxos são usados para ler e gravar em arquivos. Um fluxo é uma camada adicional criada entre um aplicativo e um arquivo. O fluxo é usado para garantir operações suaves de leitura e gravação no arquivo.
Streams normalmente são usados ao ler dados de arquivos grandes. Ao usar fluxos, os dados de arquivos grandes são divididos em pequenos pedaços e enviados para o fluxo. Esses pedaços de dados podem então ser lidos no aplicativo.
A razão para dividi-lo em pequenos pedaços é o impacto no desempenho da leitura de um arquivo grande de uma só vez. Se você lesse os dados de, digamos, um arquivo de 100 MB de uma só vez, seu aplicativo poderia travar e ficar instável. A melhor abordagem é usar fluxos para dividir o arquivo em partes gerenciáveis.
Portanto, quando uma operação de gravação é realizada no arquivo, os dados a serem gravados são primeiro gravados no fluxo. Do fluxo, os dados são então gravados no arquivo. O mesmo vale para a operação de leitura. Na operação de leitura, os dados são primeiro transferidos do arquivo para o fluxo. Os dados são então lidos do aplicativo por meio do stream. Vejamos um exemplo de como podemos ler e escrever usando streams.
Leitor de fluxo
O leitor de fluxo é usado para ler dados de um arquivo usando fluxos. Os dados do arquivo são primeiro lidos no fluxo. Depois disso, o aplicativo lê os dados do fluxo.
Para nosso exemplo, assumiremos que temos um arquivo na unidade D chamado Exemplo.txt. O arquivo será um arquivo de texto simples e terá 2 linhas conforme mostrado abaixo
- Guru99 – .Net
- Guru99 -C#
Para nosso exemplo, criaremos um aplicativo de console simples e trabalharemos com fluxos de arquivos
Vejamos um exemplo de como podemos usar fluxos para ler dados de um arquivo. Insira o código abaixo no arquivo 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(); } } }
Explicação do código: -
- Primeiro, estamos declarando um objeto leitor de fluxo. O objeto leitor de fluxo é usado em C# para definir um fluxo do arquivo para o aplicativo. Os dados serão enviados do arquivo para o fluxo sempre que os dados forem lidos do arquivo. O arquivo.OpenText é usado para abrir o arquivo “Example.txt” no modo somente leitura. O manipulador do arquivo é então enviado ao objeto leitor de fluxo.
- A seguir, estamos definindo uma variável temporária 's' que será usada para ler todos os dados do arquivo.
- Em seguida, usamos o método leitor de fluxo ReadLine para ler cada linha do buffer de fluxo. Quando realizamos isso operação, cada linha será primeiro transferida do arquivo para o buffer. Então a linha da string será transferida do buffer para a variável 's'. Em seguida, escrevemos o conteúdo da string 's' no console.
Quando o código acima é definido e o projeto é executado usando Visual Studio, você obterá a saída abaixo.
Resultado:-
Na saída, você pode ver que o Stream Reader lê ambas as linhas do arquivo. Por fim, as linhas da string lidas no stream foram enviadas para o Console.
Gravador de fluxo
O gravador de fluxo é usado para gravar dados em um arquivo usando fluxos. Os dados do aplicativo são primeiro gravados no fluxo. Depois disso, o stream grava os dados no arquivo. Vejamos um exemplo de como podemos usar fluxos para gravar dados de um arquivo. Insira o código abaixo no arquivo 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(); } } }
Explicação do código: -
- Primeiro, estamos declarando um objeto gravador de fluxo. O objeto gravador de fluxo é usado em C# para definir um fluxo. O fluxo é então usado para gravar dados do aplicativo no arquivo. Os dados serão enviados do aplicativo para o fluxo sempre que os dados precisarem ser gravados. O comando File.AppendText é usado para abrir o arquivo “Example.txt” em modo de acréscimo. O manipulador do arquivo é então enviado ao objeto gravador de fluxo.
- Estamos usando o método de gravação de fluxo Writeline para escrever a linha “Guru99 – ASP.Net” no fluxo. Do fluxo, a linha será gravada no arquivo.
- Em seguida, fechamos o gravador de fluxo após gravar no arquivo. Normalmente é uma boa prática fechar os manipuladores de arquivos quando o arquivo não for mais necessário para fins de gravação.
- Finalmente, estamos lendo o conteúdo do arquivo novamente e gravando-o no log do console. Isso serve para verificar se a linha foi gravada no arquivo.
Quando o código acima for definido e o projeto for executado usando o Visual Studio, você obterá a saída abaixo.
Resultado:-
Na saída, você pode ver que a linha “Guru99 – ASP.Net” foi adicionada ao arquivo com sucesso. Todas as 3 linhas de texto podem ser vistas no console.
Resumo
- Streams são usados como um nível intermediário entre a aplicação e o arquivo.
- Um StreamReader é usado sempre que é necessário ler dados de um arquivo.
- Um Streamwriter é usado sempre que dados precisam ser gravados em um arquivo.