Exercício – Trabalhar com caminhos

Concluído

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.

  1. No editor, insira o seguinte código acima da primeira linha do Program.cs arquivo. Este código usa o Directory.GetCurrentDirectory método para obter o caminho para o diretório atual e armazená-lo em uma nova variável currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. 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ável storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Substitua a cadeia de caracteres stores na chamada de FindFiles função pela nova variável storesDirectory:

    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);
    }
    
  4. Pressione Ctrl+S (ou Cmd+S macOS) para salvar o arquivo.

  5. Execute o programa a partir da linha de comando:

    dotnet run
    
  6. 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.

  1. No loop que itera foreach através foundFilesdo , insira a seguinte linha de código acima da if instrução para definir uma nova variável extension. Este código usa o método para obter a Path.GetExtension extensão de cada arquivo.

        var extension = Path.GetExtension(file);
    
  2. 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);
        }
    }
    
  3. Pressione Ctrl+S / Cmd+S para salvar o arquivo.

  4. 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;
}