Exercício – Trabalhar com caminhos
A classe .NET Path e Directory.GetCurrentDirectory são duas maneiras de definir e compor caminhos do sistema de arquivos.
No exercício anterior, você escreveu um programa que itera através de uma pasta para encontrar qualquer um dos arquivos sales.json nela ou quaisquer subpastas.
Neste exercício, você usa a Path classe e Directory.GetCurrentDirectory para melhorar o programa para que ele encontre qualquer arquivo com uma extensão .json.
Utilizar o diretório atual ou combinar caminhos
No código Program.cs atual, está a transmitir a localização estática da pasta stores. Agora, vamos alterar esse código para usar o Directory.GetCurrentDirectory valor em vez de passar um nome de pasta estática.
No editor, insira o seguinte código acima da primeira linha do
Program.csarquivo. Este código usa oDirectory.GetCurrentDirectorymétodo para obter o caminho para o diretório atual e armazená-lo em uma nova variávelcurrentDirectory:var currentDirectory = Directory.GetCurrentDirectory();Insira o seguinte código após a linha que você acabou de adicionar. Este código usa o
Path.Combinemétodo para criar o caminho completo para o diretório de lojas e armazená-lo em uma nova variávelstoresDirectory:var storesDirectory = Path.Combine(currentDirectory, "stores");Substitua a cadeia de caracteres
storesna chamada deFindFilesfunção pela nova variávelstoresDirectory:var salesFiles = FindFiles(storesDirectory);A parte superior do arquivo agora deve ser semelhante ao seguinte trecho:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }Pressione Ctrl+S (ou Cmd+S macOS) para salvar o arquivo.
Execute o programa a partir da linha de comando:
dotnet runO programa deve mostrar a seguinte saída:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/204/sales.jsonObserve que os nomes de arquivo retornados incluem o caminho completo do sistema. Esse caminho está incluído porque
Directory.GetCurrentDirectoryo método retorna o caminho completo para o local atual.
Encontre todos os ficheiros .json
Em vez de procurar apenas sales.json arquivos, o programa precisa procurar qualquer arquivo com uma extensão .json. Para fazer isso, você pode usar o Path.GetExtension método para verificar a extensão para cada arquivo.
No loop que itera através do
foreachdofoundFiles, insira a seguinte linha de código acima da instruçãoifpara definir uma nova variávelextension. Este código usa o métodoPath.GetExtensionpara obter a extensão de cada ficheiro.var extension = Path.GetExtension(file);Altere a instrução
ifpara que fique igual à linha de código a seguir. Esta instrução verifica se a extensão do arquivo é igual a .json.if (extension == ".json")O
foreachloop deve ser semelhante ao seguinte código:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }Pressione Ctrl+S / Cmd+S para salvar o arquivo.
Execute o programa a partir da linha de comando:
dotnet runA saída agora mostra todos os arquivos .json em cada um dos diretórios de ID da loja:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/201/salestotals.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/202/salestotals.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/203/salestotals.json /home/username/dotnet-files/stores/204/sales.json /home/username/dotnet-files/stores/204/salestotals.json
Parabéns! Utilizou a classe Path e o método Directory.GetCurrentDirectory para tornar o programa muito mais robusto. Na próxima unidade, irá aprender a criar diretórios e a mover ficheiros entre localizações.
Estás preso?
Se teve problemas em algum momento deste exercício, eis o código completo. Remova tudo o Program.cs e substitua-o por esta solução:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesFiles = FindFiles(storesDirectory);
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}