99 votes

Comment puis-je savoir dans quel répertoire mon application de console est exécutée ?

Comment puis-je savoir dans quel répertoire mon application console est exécutée avec C# ?

174voto

Hallgrim Points 7198

Pour obtenir le répertoire où se trouve le fichier .exe :

AppDomain.CurrentDomain.BaseDirectory

Pour obtenir le répertoire courant :

Environment.CurrentDirectory

3 votes

Merci. Cela aide lorsque le C# .exe se trouve dans un dossier mais est invoqué à partir d'un autre dossier (par exemple, lorsqu'il se trouve dans le PATH du système).

16 votes

Pour .NET Core, il s'agit de System.AppContext.BaseDirectory .

15voto

Atif Aziz Points 16967

En fonction des droits accordés à votre demande, que ce soit copie d'ombre est en vigueur ou non et d'autres options d'invocation et de déploiement, différentes méthodes peuvent fonctionner ou donner des résultats différents, vous devrez donc choisir votre arme judicieusement. Cela dit, toutes les méthodes suivantes donneront le même résultat pour une application console de confiance qui est exécutée localement sur la machine où elle réside :

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Vous devrez consulter la documentation des membres ci-dessus pour connaître les autorisations exactes nécessaires.

5voto

PhantomTypist Points 1330

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

3voto

Travis Illig Points 6435

En .NET, vous pouvez utiliser System.Environment.CurrentDirectory pour obtenir le répertoire à partir duquel le processus a été lancé.
System.Reflection.Assembly.GetExecutingAssembly().Location vous indiquera l'emplacement de l'assemblage en cours d'exécution (cela n'est intéressant que si l'assemblage en cours d'exécution est chargé depuis un endroit différent de l'emplacement de l'assemblage où le processus a démarré).

1voto

Jakub Kotrla Points 247

Sous Windows (pas sûr pour Unix etc.) c'est le premier argument de la ligne de commande.

En C/C++, premier élément dans argv*.

WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)

0 votes

Oui, c'est la même chose en .NET, aussi. Le premier argument est toujours le chemin complet de l'exécutable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X