Fácil C#

Usando `using` com `StreamWriter`

Enunciado

Escreva um programa que cria um StreamWriter para o arquivo "log.txt" e escreve a linha "Hello, World!". Use a declaração using para garantir que o arquivo seja fechado corretamente. Exiba "Arquivo escrito e fechado." no console após o bloco using.

Requisitos

  • O programa deve usar using (declaração ou bloco) com StreamWriter.
  • O arquivo log.txt deve ser criado e conter a linha Hello, World!.
  • A mensagem Arquivo escrito e fechado. deve ser impressa no console.

Código inicial

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Seu código aqui
    }
}

Saída esperada

Arquivo escrito e fechado.
Ver dica

Use using (var writer = new StreamWriter("log.txt")) ou using var writer = new StreamWriter("log.txt");. O método WriteLine escreve a linha.

Mostrar solução
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Bloco using garante Dispose do StreamWriter
        using (var writer = new StreamWriter("log.txt"))
        {
            writer.WriteLine("Hello, World!");
        } // Dispose é chamado aqui, fechando o arquivo
        Console.WriteLine("Arquivo escrito e fechado.");
    }
}

Passo a passo

  1. Importamos os namespaces System e System.IO para usar Console e StreamWriter.
  2. Dentro do Main, abrimos um bloco using com a criação de um StreamWriter para o arquivo log.txt.
  3. Escrevemos a linha Hello, World! usando writer.WriteLine.
  4. Ao final do bloco using, o método Dispose do StreamWriter é chamado automaticamente, fechando o arquivo e liberando o recurso.
  5. Fora do bloco, imprimimos a mensagem de confirmação no console.

Por que funciona

O StreamWriter implementa IDisposable. O bloco using garante que Dispose() seja chamado mesmo se ocorrer uma exceção durante a escrita, liberando o handle do arquivo. Isso evita que o arquivo fique bloqueado ou que dados sejam perdidos.

Erros comuns

  • Esquecer o using: o arquivo pode permanecer aberto até o coletor de lixo agir, causando bloqueios. Exemplo: var writer = new StreamWriter("log.txt"); writer.WriteLine(...); sem Dispose.
  • Usar using sem chaves e depois tentar acessar a variável: a variável fica fora de escopo. using var writer = ...; só é válida no escopo do método.
  • Não tratar exceções dentro do using: se ocorrer uma exceção, o Dispose ainda é chamado, mas a exceção propaga. Use try/catch se necessário.

Outra forma de resolver

Usar a declaração using (C# 8+):

using var writer = new StreamWriter("log.txt");
writer.WriteLine("Hello, World!");
Console.WriteLine("Arquivo escrito e fechado.");

O Dispose será chamado ao final do método Main. É mais conciso, mas o escopo do recurso é todo o método.

Saída esperada

Arquivo escrito e fechado.