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.cs
arquivo. Este código usa oDirectory.GetCurrentDirectory
mé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.Combine
mé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
stores
na chamada deFindFiles
funçã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 run
O 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.json
Observe que os nomes de arquivo retornados incluem o caminho completo do sistema. Esse caminho está incluído porque
Directory.GetCurrentDirectory
o 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
foreach
atravésfoundFiles
do , insira a seguinte linha de código acima daif
instrução para definir uma nova variávelextension
. Este código usa o método para obter aPath.GetExtension
extensão de cada arquivo.var extension = Path.GetExtension(file);
Altere a
if
instrução para se parecer com a seguinte linha de código. Esta instrução verifica se a extensão do arquivo é igual a .json.if (extension == ".json")
O
foreach
loop 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 run
A 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á com dificuldades?
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;
}