Utiliser des chemins de fichier dans .NET
.NET dispose d’un mécanisme intégré permettant d’utiliser des chemins de système de fichiers.
Dans l’exercice précédent, nous n’avions pas de nombreux dossiers à analyser. Si vous disposez d’un système de fichiers avec de nombreux fichiers et dossiers, la génération manuelle de chemins peut être fastidieuse. Heureusement, .NET intègre des constantes et des fonctions utilitaires qui facilitent la gestion des chemins de fichiers.
Ici, vous découvrez certaines constantes et fonctions utilitaires de l’espace de noms System.IO
, ainsi que le type System.Environment
qui vous permettront de rendre votre programme plus intelligent et plus résilient.
Déterminer le répertoire actif
Parfois, vous ne connaissez pas le répertoire ou le chemin dans lequel votre programme doit s’exécuter. Supposons que vous voulez que votre programme utilise le répertoire actif, mais que vous n’en connaissez pas le chemin.
.NET expose le chemin complet du répertoire actif via la méthode Directory.GetCurrentDirectory
.
Console.WriteLine(Directory.GetCurrentDirectory());
Si vous exécutez le code ci-dessus depuis le dossier 201 dans la structure suivante, Directory.GetCurrentDirectory()
retourne stores\201
:
📂 stores
📂 201
Utiliser des répertoires spéciaux
.NET s’exécute partout : sur Windows, macOS, Linux, et même sur des systèmes d’exploitation mobiles comme iOS et Android. Chaque système d’exploitation peut proposer, ou non, le concept de dossiers système spéciaux (comme un répertoire de base dédié aux fichiers propres à l’utilisateur, un répertoire de bureau ou un répertoire pour le stockage des fichiers temporaires).
Ces types de répertoires spéciaux diffèrent pour chaque système d’exploitation. Il serait fastidieux de tenter de mémoriser la structure de répertoires de chaque système d’exploitation et d’effectuer des changements en fonction du système d’exploitation actif.
L’énumération System.Environment.SpecialFolder
spécifie des constantes pour récupérer les chemins d’accès aux dossiers de système spéciaux.
Le code suivant retourne le chemin à l’équivalent du dossier Windows Mes documents ou du répertoire HOME de l’utilisateur, pour tout système d’exploitation, même si le code s’exécute sur Linux :
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Utiliser des chemins
Les chemins sont un sujet tellement fréquent que .NET inclut une classe appelée Path
spécialement pour leur utilisation.
La classe Path
se trouve dans l’espace de noms System.IO
de .NET et n’a pas besoin d’être installée.
Caractères de chemins spéciaux
Les divers systèmes d’exploitation utilisent des caractères différents pour séparer les niveaux de répertoire.
Par exemple, Windows utilise la barre oblique inverse (stores\201
), tandis que macOS utilise la barre oblique (stores/201
).
Pour vous aider à utiliser le bon caractère, la classe Path
contient le champ DirectorySeparatorChar
.
.NET interprète automatiquement ce champ dans le caractère de séparation applicable au système d’exploitation quand vous devez créer un chemin manuellement.
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
Chemins de jointure
La classe Path
utilise le concept de chemins de fichier et de dossier, qui sont juste des chaînes. Vous pouvez utiliser la classe Path
pour générer automatiquement des chemins corrects pour des systèmes d’exploitation spécifiques.
Par exemple, si vous souhaitez obtenir le chemin du dossier stores/201, vous pouvez utiliser la fonction Path.Combine
.
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
N’oubliez pas que vous devez utiliser la classe Path.Combine
ou Path.DirectorySeparatorChar
au lieu de chaînes de codage irréversible, car votre programme peut s’exécuter sur de nombreux systèmes d’exploitation différents. La classe Path
met toujours correctement en forme les chemins pour le système d’exploitation sur lequel elles est exécutée.
Conseil
Notez que la classe Path
ne se soucie pas de savoir si les choses existent vraiment. Les chemins sont conceptuels, pas physiques, et la classe génère et analyse les chaînes pour vous.
Déterminer les extensions de nom de fichier
La classe Path
peut également vous indiquer l’extension d’un nom de fichier. Si vous avez un fichier et que vous voulez savoir s’il s’agit d’un fichier JSON, utilisez la fonction Path.GetExtension
.
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
Obtenir tout ce que vous devez savoir sur un fichier ou un chemin
La classePath
contient de nombreuses méthodes différentes qui effectuent des opérations diverses. Vous pouvez obtenir le maximum d’informations concernant un répertoire ou un fichier en utilisant respectivement les classes DirectoryInfo
ou FileInfo
.
string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";
FileInfo info = new FileInfo(fileName);
Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more
Il existe de nombreuses autres propriétés et méthodes utiles dans les classes Path
, DirectoryInfo
et FileInfo
. Toutefois, ces principaux concepts sont ceux que vous utiliserez probablement le plus. Dans l’exercice suivant, vous créez des chemins et identifier les fichiers .json.