C# e arquivos: do iniciante ao mestre em trabalhar com o sistema de arquivos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que saber trabalhar com arquivos em C# é um superpoder?

\n\n

Imagine que você está escrevendo um programa que precisa salvar configurações do usuário, registrar erros ou processar milhares de documentos. Sem habilidades de trabalho com o sistema de arquivos, você vai bater em uma parede. Em C#, trabalhar com arquivos não é apenas uma leitura chata de linhas. É a oportunidade de criar utilitários poderosos, parsers e até minibancos de dados.

\n\n

Neste artigo, vamos abordar tudo: desde o básico File.ReadAllText até o trabalho avançado com streams e pastas. Você aprenderá como não perder dados, como otimizar a leitura de arquivos grandes e como contornar as "armadilhas" do sistema de arquivos. Vamos lá!

\n\n

Classes-heróis: File, FileInfo, Directory e Path

\n\n

No .NET, existem duas abordagens para trabalhar com arquivos: os métodos estáticos da classe File e os métodos de instância da classe FileInfo. O primeiro é para operações rápidas do tipo "leu-escreveu", o segundo é quando você precisa trabalhar com um único arquivo por muito tempo e mantendo o estado.

\n\n

File vs FileInfo: quando usar o quê?

\n\n

File é uma classe estática. Você escreve File.Exists("test.txt") e pronto. Conveniente, mas a cada operação o sistema verifica o caminho novamente.

\n\n

FileInfo — você cria o objeto uma vez e depois chama os métodos. É mais rápido se você fizer várias ações com o mesmo arquivo.

\n\n
// Maneira rápida\nif (File.Exists(@"C:\\data\\log.txt"))\n{\n    string content = File.ReadAllText(@"C:\\data\\log.txt");\n    Console.WriteLine(content);\n}\n\n// Maneira profissional\nFileInfo fileInfo = new FileInfo(@"C:\\data\\log.txt");\nif (fileInfo.Exists)\n{\n    using (StreamReader reader = fileInfo.OpenText())\n    {\n        string content = reader.ReadToEnd();\n        Console.WriteLine(content);\n    }\n}\n
\n\n

A classe Directory funciona pelo mesmo princípio — métodos estáticos para operações rápidas com pastas. Path é um auxiliar indispensável para concatenar caminhos: Path.Combine("pasta", "arquivo.txt") coloca automaticamente a barra correta.

\n\n

Leitura de arquivos: do pequeno ao gigante

\n\n

A leitura de arquivos em C# é uma arte de equilíbrio entre simplicidade e desempenho. Vamos analisar três níveis.

\n\n

Nível 1: Tudo de uma vez (para arquivos pequenos)

\n\n

Se o arquivo tem até 10 MB, use ReadAllText ou ReadAllLines sem medo.

\n\n
string text = File.ReadAllText("config.json");\nstring[] lines = File.ReadAllLines("users.csv");\n
\n\n

Desvantagem: com um arquivo grande, você corre o risco de obter OutOfMemoryException.

\n\n

Nível 2: Leitura linha por linha (para arquivos médios)

\n\n

Usamos StreamReader — lemos linha por linha, sem carregar tudo na memória.

\n\n
using (StreamReader reader = new StreamReader("big_log.txt"))\n{\n    string line;\n    while ((line = reader.ReadLine()) != null)\n    {\n        Console.WriteLine(line); // Processamos cada linha\n    }\n}\n
\n\n

Observe o using — ele garante que o arquivo será fechado, mesmo que ocorra um erro.

\n\n

Nível 3: Leitura de dados binários (para profissionais)

\n\n

Trabalhar com imagens, arquivos compactados ou qualquer arquivo não textual requer FileStream.

\n\n
using (FileStream fs = new FileStream("photo.jpg", FileMode.Open, FileAccess.Read))\n{\n    byte[] buffer = new byte[1024];\n    int bytesRead;\n    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)\n    {\n        // Processamos o bloco de dados\n        Console.WriteLine($"Lidos {bytesRead} bytes");\n    }\n}\n
\n\n

Escrita de arquivos: como não perder dados

\n\n

Escrever em C# não é apenas File.WriteAllText. É importante entender os modos: criar um novo arquivo, anexar ao final ou sobrescrever.

\n\n

Modos principais do FileMode

\n
    \n
  • CreateNew<

Blogs

Book Recommendations