Manipulation des chemins relatifs en C#

Pour assemblre des segments de chemin, il est recommandé d'utiliser la méthode Path.Combine fournie par le framework plutôt que la concaténation manuelle.

string racine = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
if (!Directory.Exists(Path.Combine(racine, "Images")))
{
    Directory.CreateDirectory(Path.Combine(racine, "Images"));
}
string cheminFinal = Path.Combine(racine, "Images");

Notations relatives fondamentales

Le mécanisme le plus courant repose sur la navigation depuis le répertoire d'exécution de l'application.

Répertoire courant (emplacement de l'exécutable)

// Ces deux expressions désignent le même emplacement
string fichier1 = @".\Donnees\config.xml";
string fichier2 = @"Donnees\config.xml";
// Pointe vers : [Répertoire de l'EXE]\Donnees\config.xml

Navigation vers les répertoires parents

string fichier3 = @"..\Donnees\config.xml";      // Répertoire parent immédiat
string fichier4 = @"..\..\Donnees\config.xml";   // Deux niveaux au-dessus

Techniques d'obtention des chemins de base

Voici huit approches distinctes pour récupérer les répertoires de référence, chacune avec ses particularités :

Méthode Description Particularité
Environment.CurrentDirectory Répretoire de lancement du processus Peut changer durant l'exécution
Directory.GetCurrentDirectory() Répertoire de travail actuel Dépend du dernier emplacement accédé
Application.StartupPath Chemin de lancement sans le nom de fichier Stable, spécifique WinForms
Application.ExecutablePath Chemin complet incluant le nom de l'exécutable Contient le fichier .exe
AppDomain.CurrentDomain.BaseDirectory Répertoire de base pour la résolution des assemblys Termine par un séparateur
AppDomain.CurrentDomain.SetupInformation.ApplicationBase Répertoire contenant l'application Identique à BaseDirectory dans la plupart des cas
Assembly.GetExecutingAssembly().Location Chemin complet de l'assembly en cours Inclut le nom du fichier DLL/EXE
Process.GetCurrentProcess().MainModule.FileName Chemin du module principal du processus Peut retourner le fichier hôte (vshost)

Implémentations détaillées

// Approche via l'environnement d'exécution
string viaEnvironnement = System.Environment.CurrentDirectory;

// Approche via le système de fichiers
string viaSystemeFichiers = System.IO.Directory.GetCurrentDirectory();

// Approches spécifiques aux applications Windows Forms
string demarrageSansNom = System.Windows.Forms.Application.StartupPath;
string demarrageComplet = System.Windows.Forms.Application.ExecutablePath;

// Approches via le domaine d'application
string baseDomaine = System.AppDomain.CurrentDomain.BaseDirectory;
string baseConfiguration = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

// Approches via réflexion et diagnostic
string viaAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location;
string viaProcessus = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;

Configuration externe des chemins

Une pratique courante consiste à externaliser les chemins dans des fichiers de configuration, permettant une adaptation sans recompilation.

string cheminConfiguration = Path.Combine(
    System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
    "Modules",
    "parametres.txt"
);

using (StreamReader lecteur = new StreamReader(cheminConfiguration, Encoding.UTF8))
{
    string contenu = lecteur.ReadToEnd();
    // Traitement des données...
}

Point d'attention : Les méthodes CurrentDirectory sont sujettes à modification durant l'exécution (notamment par les boîtes de dialogue de sélection de fichiers). Pour des chemins stables relatifs à l'installation, privilégiez BaseDirectory ou StartupPath.

Étiquettes: C# Path.Combine Directory AppDomain Environment.CurrentDirectory

Publié le 11 septembre à 20h59