Trabalhar com caminhos de ficheiros no .NET
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 Path
classes , DirectoryInfo
e 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.