Stream em C#: StreamReader e StreamWriter [Exemplo]

⚡ Resumo Inteligente

Um fluxo AC# é uma camada entre sua aplicação e um arquivo que permite ler ou gravar dados em pequenos blocos. Aqui você aprenderá como usar StreamReader e Stream.Writer trabalho, com exemplos e os principais tipos de fluxo contínuo.

  • 🌊 O que é: Um fluxo (stream) é uma camada intermediária entre sua aplicação e um arquivo.
  • 📖 Leitor de fluxo: O StreamReader lê o texto de um arquivo uma linha ou um bloco de cada vez.
  • ✍️ CorrenteWriter: CorrenteWriter Escreve texto em um arquivo através de um fluxo.
  • 🧩 Tipos de fluxo: FileStream, MemoryStream e BufferTodos os edStream derivam da classe Stream.
  • 🤖 Ajuda da IA: Ferramentas de IA como o GitHub Copilot geram código C# em fluxo instantaneamente.

Leitor de fluxo C# e Writer

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.

Tipos de fluxos em C#

Todas as classes de fluxo em C# derivam de abstract Stream classe na System.IO namespace. Cada tipo se destina a uma fonte de dados diferente, mas compartilha os mesmos métodos de leitura e gravação. Os fluxos mais comumente usados ​​estão listados abaixo.

  • Filestream Lê e escreve arquivos no disco, um byte ou bloco por vez.
  • Fluxo de memória Armazena dados na memória em vez de em um arquivo, o que é útil para buffers temporários.
  • BufferedStream Envolve outro fluxo para reduzir o número de operações lentas de disco ou de rede.
  • Fluxo de rede Envia e recebe dados através de um socket de rede.

Para trabalhar com texto, o C# fornece o StreamReader e StreamWriter Classes auxiliares, que encapsulam um fluxo e serão abordadas nas próximas seções.

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.

Leitor de fluxo

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();
  }
 }
}

Code Explicação:-

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

Leitor de fluxo

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.

Corrente Writer

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.

Corrente Writer

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();
  }
 }
}

Code Explicação:-

  1. 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.
  2. Estamos usando o método de escrita de fluxo Writeline para escrever a linha “Guru99 – ASP.Net” para o fluxo. A partir do fluxo, a linha será então 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 for 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 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:-

Corrente Writer

A partir da saída, você pode ver que a linha “GuruA linha "99 – ASP.Net" foi adicionada ao arquivo com sucesso. Todas as 3 linhas de texto podem ser visualizadas no console.

Perguntas Frequentes

Um fluxo (stream) é uma camada intermediária entre um aplicativo e um arquivo. Ele divide arquivos grandes em partes menores para que os dados possam ser lidos ou gravados sem carregar o arquivo inteiro na memória.

StreamReader lê dados de texto de um arquivo através de um fluxo. Arquivo.OpenText Retorna um StreamReader, e seu método ReadLine lê o arquivo uma linha por vez.

CorrenteWriter Escreve dados de texto em um arquivo por meio de um fluxo. `File.AppendText` retorna um `Stream`.Writer, e seu método WriteLine envia cada linha para o arquivo.

Os fluxos comuns incluem FileStream para arquivos e MemoryStream para dados em memória. BufferedStream para bufferização e NetworkStream para sockets. Todos derivam do abstracClasse Stream.

FileStream lê e grava bytes brutos em um arquivo, enquanto StreamReader encapsula um fluxo para ler texto como caracteres e linhas. StreamReader é mais fácil de usar para arquivos de texto.

Assistentes de IA como o GitHub Copilot, o StreamReader e o Stream oferecem autocompletar.Writer Codifique, adicione blocos `using` para descarte e gere loops de leitura de arquivos a partir de um breve comentário.

Sim. Ferramentas com inteligência artificial geram métodos de leitura e gravação de fluxos, sugerem o armazenamento em buffer para arquivos grandes e adicionam instruções `using` para que os fluxos sejam fechados com segurança.

A instrução `using` fecha e descarta automaticamente o fluxo quando o bloco termina, mesmo que ocorra um erro. Isso libera o identificador de arquivo e evita vazamentos de recursos.

Resuma esta postagem com: