Exercice - Utiliser le système de fichiers
Vous pouvez utiliser .NET pour rechercher et retourner des informations sur les fichiers et les dossiers.
Tailwind Traders compte de nombreux magasins physiques dans le monde entier. Chaque nuit, chaque magasin crée un fichier nommé sales.json qui contient le total de toutes les ventes de la journée. Ces fichiers sont organisés en dossiers nommés selon l’ID de magasin.
Remarque
Ce module utilise l’interface CLI .NET et Visual Studio Code pour le développement local. À l’issue de ce module, vous pourrez appliquer les concepts que vous avez appris en utilisant un environnement de développement comme Visual Studio (Windows) ou Visual Studio pour Mac (macOS), ou encore poursuivre le développement dans Visual Studio Code (Windows, Linux et macOS).
Ce module utilise le kit de développement logiciel (SDK) .NET 8.0. Assurez-vous que .NET 8.0 est installé en exécutant la commande suivante dans votre terminal de commandes préféré :
dotnet --list-sdks
Une sortie semblable à l’exemple suivant s’affiche :
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Vérifiez que la liste comporte une version commençant par 8
. S’il n’y en a pas ou que la commande est introuvable, installez la dernière version du kit de développement logiciel (SDK) .NET 8.0.
Cloner le projet
Dans cet exercice, vous écrivez un programme .NET qui recherche dans un répertoire et ses sous-répertoires les fichiers nommés sales.json.
Un projet de démarrage a déjà été créé pour vous. Vous le clonez à l’aide du terminal intégré de Visual Studio Code.
Ouvrez Visual Studio Code.
Dans le menu principal, sélectionnez Afficher>Terminal pour ouvrir une fenêtre de terminal.
(Facultatif) Dans la fenêtre de terminal, accédez au répertoire dans lequel vous souhaitez copier les fichiers, par exemple
c:\MyProjects
.Dans la fenêtre de terminal, exécutez la commande suivante pour cloner le projet de démarrage et accéder au projet cloné :
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Exécutez la commande suivante pour créer un projet de console .NET :
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
Exécutez la commande suivante pour ouvrir le nouveau projet .NET dans la même instance de Visual Studio Code :
code -a .
Conseil
À ce stade, Visual Studio Code peut vous inviter à vérifier qu’il ne manque aucune des ressources nécessaires pour générer et exécuter le projet.
Sélectionnez le triangle avec le point d’exclamation, puis Relancer le terminal pour ajouter les fichiers qui permettent à Visual Studio Code d’exécuter et de déboguer le projet.
Dans la fenêtre de l’Explorateur, sous mslearn-dotnet-files, développez le dossier stores et chacun des dossiers numérotés qui s’y trouvent.
Rechercher les fichiers sales.json
Les tâches suivantes créent un programme pour rechercher tous les fichiers sales.json dans tous les dossiers du projet mslearn-dotnet-files
.
Inclure l’espace de noms System.IO
Dans la fenêtre de l’Explorateur, sélectionnez le fichier
Program.cs
pour l’ouvrir dans l’éditeur.Collez le code suivant dans la première ligne du fichier
Program.cs
pour importer les espaces de nomsSystem.IO
etSystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Remarque
À partir de .NET 6, les deux instructions du code précédent sont automatiquement incluses dans un nouveau projet par le biais du groupe de propriétés ImplcitUsings
. Étant donné que nous avons spécifié l’indicateur -f net8.0
lors de la création d’un nouveau projet de console, celles-ci sont implicitement ajoutées. Toutefois, si vous utilisez un projet plus ancien, vous devez les inclure dans le fichier Program.cs
. Cela n’affecte pas le projet si vous les laissez dans le fichier.
Écrire une fonction pour rechercher les fichiers sales.json
Créez une fonction appelée FindFiles
qui prend un paramètre folderName
.
Remplacez la ligne Console.WriteLine("Hello, World!"); par le code suivant :
IEnumerable<string> FindFiles(string folderName) { List<string> salesFiles = new List<string>(); var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (var file in foundFiles) { // The file name will contain the full path, so only check the end of it if (file.EndsWith("sales.json")) { salesFiles.Add(file); } } return salesFiles; }
Insérez le code suivant sous les instructions
using
pour appeler la fonctionFindFiles
. Ce code transmet le nom du dossier stores comme emplacement de recherche des fichiers.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Appuyez sur Ctrl+S (ou Cmd+S macOS) pour enregistrer le fichier
Program.cs
.
Exécuter le programme
Entrez la commande suivante dans la fenêtre de terminal pour exécuter le programme :
dotnet run
Le programme doit afficher la sortie suivante :
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
Excellent ! Vous avez réussi à écrire un programme en ligne de commande qui parcourt tous les dossiers du répertoire stores
et liste tous les fichiers sales.json qui s’y trouvent.
Dans cet exemple, le chemin du répertoire stores était plutôt simple et il se trouvait dans le répertoire de travail du programme. Dans l’unité suivante, vous allez apprendre à construire des structures complexes qui fonctionnent sur plusieurs systèmes d’exploitation en utilisant la classe Path
.
Vous êtes bloqué ?
Si vous rencontrez des problèmes lors de l’exécution du programme, voici le code terminé du fichier Program.cs
. Remplacez le contenu de votre fichier Program.cs
par ce code :
var salesFiles = FindFiles("stores");
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)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}