Utiliser le système de fichiers
.NET contient des types intégrés permettant d’utiliser le système de fichiers qui se trouve dans l’espace de noms System.IO
.
Ici, vous allez en apprendre plus sur les types disponibles, dans System.IO
avec C#, pour lire un système de fichiers et découvrir les fichiers et répertoires.
Scénario
Les grandes chaînes de magasins écrivent souvent des données dans des fichiers pour pouvoir les traiter en lots ultérieurement.
Chacun des magasins Tailwind Traders écrit son total de ventes dans un fichier qu’il envoie ensuite dans un emplacement central. Pour exploiter ces fichiers, l’entreprise doit créer un processus de traitement par lots utilisable avec le système de fichiers.
Inclure l’espace de noms System.IO
L’espace de noms System.IO contient des types intégrés qui vous permettent d’interagir avec des fichiers et des répertoires. Par exemple, vous pouvez récupérer des collections de fichiers et de répertoires en fonction de critères de recherche, ainsi que les propriétés get
et set
pour les fichiers et répertoires. Vous pouvez également utiliser les types d’espaces de noms System.IO
pour lire et écrire des fichiers et flux de données, à la fois de façon synchrone et asynchrone.
Pour le moment, nous allons nous concentrer sur ce que vous devez savoir pour utiliser des répertoires avec la classe Directory
contenue dans l’espace de noms System.IO
. La classe Directory expose des méthodes statiques pour créer, parcourir et énumérer des répertoires et sous-répertoires.
Lister tous les répertoires
La classe Directory
est souvent utilisée pour inventorier (ou énumérer) les répertoires. Par exemple, la structure de fichier Tailwind Traders a un dossier racine nommé stores. Dans ce dossier se trouvent des sous-dossiers organisés par numéro de magasin, et à l’intérieur de ces dossiers se trouvent les fichiers sales-total et inventory. La structure ressemble à l’exemple suivant :
📂 stores
📄 sales.json
📄 totals.txt
📂 201
📄 sales.json
📄 salestotals.json
📄 inventory.txt
📂 202
Pour lire et lister les noms des répertoires du plus haut niveau, vous pouvez utiliser la fonction Directory.EnumerateDirectories
.
IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");
foreach (var dir in listOfDirectories) {
Console.WriteLine(dir);
}
// Outputs:
// stores/201
// stores/202
Répertorier les fichiers dans un répertoire spécifique
Pour répertorier les noms de tous les fichiers d’un répertoire, vous pouvez utiliser la fonction Directory.EnumerateFiles
.
IEnumerable<string> files = Directory.EnumerateFiles("stores");
foreach (var file in files)
{
Console.WriteLine(file);
}
// Outputs:
// stores/totals.txt
// stores/sales.json
Lister tout le contenu d’un répertoire et de tous ses sous-répertoires
Les fonctions Directory.EnumerateDirectories
et Directory.EnumerateFiles
ont une surcharge qui accepte un paramètre pour spécifier que les fichiers de modèle de recherche et les répertoires doivent correspondre.
Une autre surcharge accepte un paramètre pour indiquer de parcourir ou non de manière récursive un dossier spécifié et tous ses sous-dossiers.
// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);
foreach (var file in allFilesInAllFolders)
{
Console.WriteLine(file);
}
// Outputs:
// stores/totals.txt
// stores/201/inventory.txt
Dans le prochain exercice, vous allez utiliser la classe Directory
pour lire dynamiquement le répertoire des principaux magasins de Tailwind Traders afin de rechercher tous les fichiers sales.json.