Introdução: por que é necessário trabalhar com o sistema de arquivos em C#
\nQualquer aplicação séria, mais cedo ou mais tarde, enfrenta a necessidade de salvar dados. Sejam arquivos de configuração, logs, documentos de usuário ou dados temporários — trabalhar com o sistema de arquivos é uma habilidade fundamental para o desenvolvedor C#. Neste artigo, com exemplos práticos, veremos como criar, ler, escrever e gerenciar arquivos e pastas usando .NET. Você aprenderá não apenas as operações básicas, mas também as melhores práticas de tratamento de exceções e trabalho com fluxos.
\n\nClasses principais para trabalhar com o sistema de arquivos
\nNo .NET, para interagir com o sistema de arquivos, são usados os namespaces System.IO e System.IO.Enumeration. As principais classes que você precisará:
- \n
File— métodos estáticos para criar, copiar, excluir e mover arquivos. \n FileInfo— classe de instância para trabalhar com um arquivo específico (suporta as mesmas operações, mas requer a criação de um objeto). \n Directory— métodos estáticos para trabalhar com diretórios. \n DirectoryInfo— classe de instância para trabalhar com diretórios. \n Path— classe utilitária para trabalhar com caminhos (combinação, obtenção de extensão, nome, etc.). \n FileStream— fluxo de baixo nível para leitura/escrita de bytes. \n StreamReader/StreamWriter— wrappers de alto nível para trabalhar com texto. \n
A escolha entre métodos estáticos e classes de instância depende do cenário. Se você precisa executar uma única operação — use File ou Directory. Se forem planejadas várias operações em um mesmo objeto — crie FileInfo ou DirectoryInfo.
Criação, leitura e escrita de arquivos
\n\n1. Criação e escrita de arquivo de texto
\nA maneira mais simples de escrever texto em um arquivo é usar o método File.WriteAllText. Ele cria o arquivo (ou sobrescreve um existente) e fecha o fluxo automaticamente.
using System.IO;\n\nstring path = @"C:\\temp\\example.txt";\nstring content = "Olá, mundo! Este é um arquivo de teste.";\n\nFile.WriteAllText(path, content);\nConsole.WriteLine("Arquivo criado e escrito.");\nSe precisar adicionar dados ao final do arquivo, use File.AppendAllText:
File.AppendAllText(path, "\\nLinha adicionada.");\n\n2. Leitura de arquivo
\nPara ler todo o texto, use File.ReadAllText:
string readContent = File.ReadAllText(path);\nConsole.WriteLine(readContent);\nSe o arquivo for grande, é melhor ler linha por linha com File.ReadLines (retorna IEnumerable<string>):
foreach (string line in File.ReadLines(path))\n{\n Console.WriteLine(line);\n}\n\n3. Trabalho com arquivos binários
\nPara dados binários (imagens, arquivos compactados), use FileStream ou BinaryReader/BinaryWriter. Exemplo de escrita de um array de bytes:
byte[] data = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"\nFile.WriteAllBytes(@"C:\\temp\\binary.dat", data);\n\nbyte[] readData = File.ReadAllBytes(@"C:\\temp\\binary.dat");\nConsole.WriteLine(BitConverter.ToString(readData)); // 48-65-6C-6C-6F\n\nTrabalho com pastas e gerenciamento de arquivos
\n\n1. Criação e exclusão de pastas
\nCriar uma pasta pode ser feito com Directory.CreateDirectory. O método cria todas as pastas ausentes no caminho:
string dirPath = @"C:\\temp\\MyApp\\Logs";\nDirectory.CreateDirectory(dirPath);\nConsole.WriteLine("Pasta criada.");\nExclusão de pasta (recursiva, com todo o conteúdo):
\nif (Directory.Exists(dirPath))\n{\n Directory.Delete(dirPat