Exercice - Utiliser des chemins

Effectué

La classe Path .NET et Directory.GetCurrentDirectory sont deux façons de définir et de créer des chemins de système de fichiers.

Dans l’exercice précédent, vous avez écrit un programme qui itère au sein d’un dossier pour trouver tous les fichiers sales.json dans ce dossier ou ses sous-dossiers.

Dans cet exercice, vous utilisez la classe Path et Directory.GetCurrentDirectory pour améliorer le programme en le rendant capable de trouver tous les fichiers avec l’extension .json.

Utiliser le répertoire actif et combiner les chemins

Dans le code Program.cs actuel, vous passez l’emplacement statique du dossier stores. Nous allons maintenant modifier ce code pour utiliser la valeur Directory.GetCurrentDirectory au lieu de passer un nom de dossier statique.

  1. Dans l’éditeur, insérez le code suivant au-dessus de la première ligne du fichier Program.cs. Ce code utilise la méthode Directory.GetCurrentDirectory pour obtenir le chemin du répertoire actif et le stocker dans une nouvelle variable currentDirectory :

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Insérez le code suivant après la ligne que vous venez d’ajouter. Ce code utilise la méthode Path.Combine pour créer le chemin complet vers le répertoire stores et pour le stocker dans une nouvelle variable, storesDirectory :

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Remplacez la chaîne stores dans l’appel de fonction FindFiles par la nouvelle variable storesDirectory :

    var salesFiles = FindFiles(storesDirectory);
    

    La partie supérieure de votre fichier doit maintenant ressembler à l’extrait de code suivant :

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Appuyez sur Ctrl+S (ou Cmd+S macOS) pour enregistrer le fichier.

  5. Exécutez le programme à partir de la ligne de commande :

    dotnet run
    
  6. Le programme doit afficher la sortie suivante :

    /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  
    

    Notez que les noms de fichier retournés incluent le chemin complet du système. Ce chemin apparaît, car la méthode Directory.GetCurrentDirectory retourne le chemin complet de l’emplacement actuel.

Rechercher tous les fichiers .json

Au lieu de rechercher uniquement les fichiers sales.json, le programme a besoin de rechercher tous les fichiers qui portent une extension .json. Pour ce faire, vous pouvez utiliser la méthode Path.GetExtension afin de vérifier l’extension de chaque fichier.

  1. Dans la boucle foreach qui itère dans foundFiles, insérez la ligne de code suivante au-dessus de l’instruction if pour définir une nouvelle variable extension. Ce code utilise la méthode Path.GetExtension pour récupérer l’extension de chaque fichier.

        var extension = Path.GetExtension(file);
    
  2. Modifiez l’instruction if pour qu’elle ressemble à la ligne de code suivante. Cette instruction vérifie si l’extension du fichier est .json.

           if (extension == ".json")
    

    La boucle foreach doit être semblable au code suivant :

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Appuyez sur Ctrl+S / Cmd+S pour enregistrer le fichier.

  4. Exécutez le programme à partir de la ligne de commande :

    dotnet run
    

    La sortie affiche maintenant tous les fichiers .json qui se trouvent dans chacun des répertoires d’ID de magasin :

    /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  
    

Félicitations ! Vous avez utilisé la classe Path et la méthode Directory.GetCurrentDirectory pour rendre le programme plus robuste. Dans l’unité suivante, vous allez apprendre à créer des répertoires et à déplacer des fichiers entre différents emplacements.

Vous êtes bloqué ?

Si vous êtes bloqué quelque part dans cet exercice, voici le code complet. Supprimez tout le contenu de Program.cs et remplacez-le par cette solution :

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