Trabalhar com caminhos de ficheiros no .NET

Concluído

O .NET tem um mecanismo interno para trabalhar com caminhos do sistema de arquivos.

No exercício anterior, não tínhamos muitas pastas para analisar. Se você tiver um sistema de arquivos com muitos arquivos e pastas, a criação manual de caminhos pode ser tediosa. Felizmente, o .NET fornece algumas constantes internas e funções de utilitário para facilitar o manuseio de caminhos de arquivos.

Aqui, você aprende sobre algumas das constantes e funções de utilidade no System.IO namespace e no System.Environment tipo para que você possa tornar seu programa mais inteligente e resiliente.

Determine o diretório atual

Às vezes, você não sabe em qual diretório ou caminho seu programa deve ser executado. Digamos que você queira que seu programa use o diretório atual, mas não sabe o caminho.

O .NET expõe o caminho completo para o diretório atual através do método Directory.GetCurrentDirectory.

Console.WriteLine(Directory.GetCurrentDirectory());

Se você executar o código anterior da pasta 201 na seguinte estrutura, Directory.GetCurrentDirectory() retornará stores\201:

📂 stores
    📂 201

Trabalhar com diretórios especiais

O .NET é executado em todos os lugares: no Windows, macOS, Linux e até mesmo em sistemas operacionais móveis como iOS e Android. Cada sistema operacional pode ou não ter o conceito de pastas especiais do sistema (como um diretório base, que é dedicado para arquivos específicos do usuário, ou um diretório da área de trabalho, ou um diretório para armazenar arquivos temporários).

Esses tipos de diretórios especiais diferem para cada sistema operacional. Seria complicado tentar lembrar a estrutura de diretórios de cada sistema operacional e executar switches com base no sistema operacional atual.

A enumeração System.Environment.SpecialFolder especifica constantes para obter caminhos para pastas de sistema especiais.

O código a seguir retorna o caminho para o equivalente da pasta Meus Documentos do Windows ou o diretório HOME do usuário para qualquer sistema operacional, mesmo que o código esteja sendo executado no Linux:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Trabalhe com caminhos

Os caminhos são um assunto que surge com tanta frequência que o .NET inclui uma classe chamada Path especificamente para trabalhar com eles.

A Path classe está localizada no System.IO namespace do .NET e não precisa ser instalada.

Carateres de caminho especiais

Sistemas operativos diferentes utilizam carateres diferentes para separar níveis de diretório.

Por exemplo, o Windows usa a barra invertida (stores\201) e o macOS usa a barra invertida (stores/201).

Para ajudar a utilizar o caráter correto, a classe Path contém o campo DirectorySeparatorChar.

O .NET interpreta automaticamente esse campo no caractere separador aplicável ao sistema operacional quando você precisa criar um caminho manualmente.

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

Associe caminhos

A classe Path funciona com o conceito de caminhos de ficheiros e pastas, que são apenas cadeias. Você pode usar a Path classe para criar automaticamente caminhos corretos para sistemas operacionais específicos.

Por exemplo, se quiser obter o caminho da pasta stores/201, pode utilizar a função Path.Combine para tal.

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

Lembre-se, você deve usar a Path.Combine classe or Path.DirectorySeparatorChar em vez de cadeias de caracteres de codificação, porque seu programa pode estar sendo executado em muitos sistemas operacionais diferentes. A Path classe sempre formata os caminhos corretamente para o sistema operacional no qual está sendo executada.

Gorjeta

A Path classe não se importa se as coisas realmente existem. Os caminhos são conceituais, não físicos, e a classe está construindo e analisando cadeias de caracteres para você.

Determinar extensões de nome de arquivo

A Path classe também pode dizer a extensão de um nome de arquivo. Se você tem um arquivo e quer saber se é um arquivo JSON, você pode usar a Path.GetExtension função.

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

Obtenha tudo o que precisa de saber sobre um ficheiro ou caminho

A classe Path contém muitos métodos diferentes que realizam várias ações. Pode obter a maioria das informações sobre um diretório ou ficheiro com as classes DirectoryInfo ou FileInfo, respetivamente.

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

Há muito mais propriedades úteis e métodos de utilidade nas Pathclasses , DirectoryInfoe FileInfo , mas esses conceitos principais são os que você provavelmente usará com mais frequência. No próximo exercício, irá compor caminhos e identificar ficheiros .json.