Trabalhando com o sistema de arquivos em C#: do básico às técnicas avançadas
Trabalhar com o sistema de arquivos é uma das tarefas principais no desenvolvimento de aplicações em C#. Seja para salvar dados do usuário, ler arquivos de configuração ou processar logs — a capacidade de interagir eficientemente com arquivos e diretórios é essencial para todo desenvolvedor .NET. Neste artigo, vamos explorar as principais classes do namespace System.IO, aprender a criar, ler e modificar arquivos, além de abordar as melhores práticas de tratamento de erros.
1. Principais classes para trabalhar com o sistema de arquivos
No .NET, existem várias classes-chave para trabalhar com arquivos e diretórios. Vamos analisá-las em detalhes.
Classe File e FileInfo
File — é uma classe estática que fornece métodos para criar, copiar, excluir e mover arquivos. FileInfo — é uma classe de instância que permite trabalhar com um arquivo específico.
using System.IO;
// Usando a classe estática Filestring path = @"C:\\Temp\\test.txt";if (File.Exists(path)){ string content = File.ReadAllText(path); Console.WriteLine(content);}
// Usando FileInfoFileInfo fileInfo = new FileInfo(path);if (fileInfo.Exists){ Console.WriteLine($"Tamanho do arquivo: {fileInfo.Length} bytes"); Console.WriteLine($"Data de criação: {fileInfo.CreationTime}");}Classe Directory e DirectoryInfo
De forma similar, Directory — é uma classe estática para operações com diretórios, e DirectoryInfo — para trabalhar com uma pasta específica.
string dirPath = @"C:\\Temp\\MyFolder";
// Criando diretórioDirectory.CreateDirectory(dirPath);
// Obtendo informações do diretórioDirectoryInfo dirInfo = new DirectoryInfo(dirPath);if (dirInfo.Exists){ Console.WriteLine($"Subdiretórios: {dirInfo.GetDirectories().Length}"); Console.WriteLine($"Arquivos: {dirInfo.GetFiles().Length}");}Classe Path
Path — é uma classe utilitária para trabalhar com caminhos. Ela ajuda a combinar caminhos, extrair extensões e nomes de arquivos.
string fullPath = @"C:\\Temp\\myfile.txt";string fileName = Path.GetFileName(fullPath); // myfile.txtstring extension = Path.GetExtension(fullPath); // .txtstring directory = Path.GetDirectoryName(fullPath); // C:\\Tempstring combined = Path.Combine(@"C:\\Temp", "newfile.txt"); // C:\\Tempewfile.txt2. Leitura e escrita de arquivos
Em C#, existem várias maneiras de ler e escrever arquivos. A escolha depende do tamanho dos dados e do desempenho necessário.
Leitura de arquivos de texto
Para arquivos pequenos, é conveniente usar métodos de uma linha:
// Lendo o arquivo inteiro em uma linhastring text = File.ReadAllText("data.txt");
// Lendo todas as linhas em um arraystring[] lines = File.ReadAllLines("data.txt");
// Lendo com StreamReader (para arquivos grandes)using (StreamReader reader = new StreamReader("largefile.txt")){ string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); }}Escrita em arquivos
// Escrevendo uma stringFile.WriteAllText("output.txt", "Hello, World!");
// Escrevendo um array de stringsstring[] lines = { "Primeira linha", "Segunda linha" };File.WriteAllLines("output.txt", lines);
// Adicionando ao final do arquivoFile.AppendAllText("log.txt", $"{DateTime.Now}: Nova entrada");
// Escrevendo com StreamWriterusing (StreamWriter writer = new StreamWriter("data.txt", append: true)){ writer.WriteLine("Nova linha");}Trabalhando com arquivos binários
Para dados binários, use FileStream e BinaryReader/BinaryWriter:
// Escrevendo dados bináriosusing (BinaryWriter writer = new BinaryWriter(File.Open("data.bin"
```