Exercice - Utiliser des chemins
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.
Dans l’éditeur, insérez le code suivant au-dessus de la première ligne du fichier
Program.cs
. Ce code utilise la méthodeDirectory.GetCurrentDirectory
pour obtenir le chemin du répertoire actif et le stocker dans une nouvelle variablecurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
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");
Remplacez la chaîne
stores
dans l’appel de fonctionFindFiles
par la nouvelle variablestoresDirectory
: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); }
Appuyez sur Ctrl+S (ou Cmd+S macOS) pour enregistrer le fichier.
Exécutez le programme à partir de la ligne de commande :
dotnet run
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.
Dans la boucle
foreach
qui itère dansfoundFiles
, insérez la ligne de code suivante au-dessus de l’instructionif
pour définir une nouvelle variableextension
. Ce code utilise la méthodePath.GetExtension
pour récupérer l’extension de chaque fichier.var extension = Path.GetExtension(file);
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); } }
Appuyez sur Ctrl+S / Cmd+S pour enregistrer le fichier.
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;
}