Tutorial de fluxo C #: StreamReader, StreamWriter com exemplo

Em 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.

Os fluxos são normalmente 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 blocos de dados podem ser lidos no aplicativo.

A razão para dividi-lo em pequenos pedaços é o impacto no desempenho de ler um arquivo grande de uma só vez. Se você lesse os dados, digamos, de um arquivo de 100 MB de uma só vez, seu aplicativo poderia simplesmente travar e se tornar 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 gravados primeiro no fluxo. A partir do fluxo, os dados sã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 fluxo. Vejamos um exemplo de como podemos ler e escrever usando streams.

Neste tutorial, você aprenderá-

Leitor de fluxo

O leitor de fluxo é usado para ler dados de um arquivo usando fluxos. Os dados do arquivo são lidos primeiro no fluxo. Depois disso, o aplicativo lê os dados do fluxo.

Para nosso exemplo, assumiremos que temos um arquivo na unidade D chamado Example.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 streams 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: -

  1. 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 File.OpenText é usado para abrir o arquivo 'Example.txt' no modo somente leitura. O manipulador do arquivo é então enviado ao objeto leitor de fluxo.
  2. A seguir, estamos definindo uma variável temporária 's' que será usada para ler todos os dados do arquivo.
  3. Em seguida, usamos o método ReadLine do leitor de fluxo para ler cada linha do buffer de fluxo. Quando executamos esta operação, cada linha será primeiro transferida do arquivo para o buffer. Em seguida, a linha da string será transferida do buffer para a variável 's'. Em seguida, gravamos o conteúdo da string 's' no console.

Quando o código acima for definido e o projeto for executado usando o Visual Studio, você obterá a saída abaixo.

Saída:-

Na saída, você pode ver que o Stream Reader leu ambas as linhas do arquivo. Finalmente, as linhas da string lida do stream foram enviadas para o console.

Escritor 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 fluxo grava os dados no arquivo. Vejamos um exemplo de como podemos usar streams 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: -

  1. Primeiro, estamos declarando um objeto stream writer. O objeto stream writer é usado em C # para definir um stream. 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 um modo de acréscimo. O manipulador para o arquivo é então enviado para o objeto stream writer.
  2. Estamos usando o método de gravação de fluxo Writeline para escrever a linha 'Guru99 - ASP.Net' no fluxo. A partir do fluxo, a linha será gravada no arquivo.
  3. 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 é mais necessário para fins de gravação.
  4. Finalmente, estamos lendo o conteúdo do arquivo novamente e gravando-o no log do console. Isso é 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.

Saída:-

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

  • Os fluxos são usados ​​como um nível intermediário entre o aplicativo e o arquivo.
  • Um StreamReader é usado sempre que os dados precisam ser lidos de um arquivo.
  • Um Streamwriter é usado sempre que os dados precisam ser gravados em um arquivo.