Exercício – trabalhar com caminhos
A classe Path
do .NET e Directory.GetCurrentDirectory
são duas maneiras de definir e compor caminhos do sistema de arquivos.
No exercício anterior, você gravou um programa que itera para localizar um dos arquivos sales.json por meio de uma pasta ou subpastas.
Neste exercício, utilize a classe Path
e Directory.GetCurrentDirectory
para aprimorar o programa, de modo que ele localize qualquer arquivo com uma extensão .json.
Usar o diretório atual e combinar caminhos
No código Program.cs atual, você está passando a localização estática da pasta repositórios. Agora, vamos alterar esse código para usar o valor Directory.GetCurrentDirectory
em vez de passar um nome de pasta estática.
No editor, insira o código a seguir na parte de cima da primeira linha do arquivo
Program.cs
. Este código usa o métodoDirectory.GetCurrentDirectory
para obter o caminho para o diretório atual e armazená-lo em uma nova variávelcurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
Insira o código a seguir após a linha que você acabou de adicionar. Esse código usa o método
Path.Combine
para criar o caminho completo para o diretório lojas e o armazena em uma nova variávelstoresDirectory
:var storesDirectory = Path.Combine(currentDirectory, "stores");
Substitua a cadeia de caracteres
stores
na chamada de funçãoFindFiles
pela nova variávelstoresDirectory
:var salesFiles = FindFiles(storesDirectory);
O início do arquivo agora será semelhante ao seguinte snippet:
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 na linha de comando:
dotnet run
O programa 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.json
Observe que os nomes dos arquivos retornados incluem o caminho completo do sistema. Esse caminho foi incluído porque o método
Directory.GetCurrentDirectory
retorna um caminho completo para o local atual.
Localizar todos os arquivos .json
Em vez de procurar somente arquivos sales.json, o programa precisa pesquisar todos os arquivos com a extensão .json. Para fazer isso, use o método Path.GetExtension
a fim de verificar a extensão de cada arquivo.
No loop
foreach
que itera por meio defoundFiles
, insira a linha de código a seguir na parte de cima da instruçãoif
para definir uma nova variávelextension
. Esse código usa o métodoPath.GetExtension
para obter a extensão de cada arquivo.var extension = Path.GetExtension(file);
Altere a instrução
if
para ser semelhante à linha de código a seguir. Essa instrução verifica se a extensão do arquivo é .json.if (extension == ".json")
O loop
foreach
será semelhante ao código a seguir: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 na linha de comando:
dotnet run
A saída agora mostra todos os arquivos .json em cada um dos diretórios da 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
Bom trabalho! Você usou a classe Path
e o método Directory.GetCurrentDirectory
para tornar o programa bem mais robusto. Na próxima unidade, você aprenderá a criar diretórios e a mover arquivos entre locais.
Ficou preso?
Se você ficou preso em algum ponto deste exercício, veja o código concluído. Remova tudo o que há em Program.cs e substitua por essa 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;
}