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) comStreamWriter. - O arquivo
log.txtdeve ser criado e conter a linhaHello, 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
- Importamos os namespaces
SystemeSystem.IOpara usarConsoleeStreamWriter. - Dentro do
Main, abrimos um blocousingcom a criação de umStreamWriterpara o arquivolog.txt. - Escrevemos a linha
Hello, World!usandowriter.WriteLine. - Ao final do bloco
using, o métodoDisposedoStreamWriteré chamado automaticamente, fechando o arquivo e liberando o recurso. - 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(...);semDispose. - Usar
usingsem 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, oDisposeainda é chamado, mas a exceção propaga. Usetry/catchse 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.