Comment savoir dans quel répertoire s'exécute mon application console?

91

Comment savoir dans quel répertoire mon application console s'exécute avec C #?

John Sheehan
la source

Réponses:

160

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

AppDomain.CurrentDomain.BaseDirectory

Pour obtenir le répertoire courant:

Environment.CurrentDirectory
Hallgrim
la source
2
Merci. Aide lorsque le C # .exe est dans un dossier mais est appelé à partir d'un autre dossier (par exemple: lorsqu'il est sur le système PATH)
DeepSpace101
14
Pour .NET Core, c'est le cas System.AppContext.BaseDirectory.
NightOwl888
15

Selon les droits accordés à votre application, que le cliché instantané soit 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, tous les éléments suivants donneront le même résultat pour une application console entièrement fiable 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( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

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

Atif Aziz
la source
5

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

Jason Kanaris
la source
3

Dans .NET, vous pouvez utiliser System.Environment.CurrentDirectorypour obtenir le répertoire à partir duquel le processus a été lancé.
System.Reflection.Assembly.GetExecutingAssembly().Locationvous indiquera l'emplacement de l'assembly en cours d'exécution (ce n'est intéressant que si l'assembly en cours d'exécution est chargé à partir d'un endroit différent de l'emplacement de l'assembly où le processus a commencé).

Travis Illig
la source
1

Sous Windows (pas sûr d'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)

Jakub Kotrla
la source
Oui, c'est la même chose dans .NET. Le premier argument est toujours le chemin complet de l'exécutable.
Adam Neal
1

Application.StartUpPath;


la source
voulez-vous créer un lien vers une documentation?
John Sheehan
0

Disons que le nom de votre projet d'application de la console principale .Net est DataPrep.

Obtenir le répertoire de base du projet:

Console.WriteLine(Environment.CurrentDirectory);

Sortie: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Sortie: ~ DataPrep \

RM Shahidul Islam Shahed
la source
0

Utiliser AppContext.BaseDirectorypour .net5.

vivek nuna
la source