Come faccio a sapere in quale directory è in esecuzione la mia app per console?


Risposte:


160

Per ottenere la directory in cui si trova il file .exe:

AppDomain.CurrentDomain.BaseDirectory

Per ottenere la directory corrente:

Environment.CurrentDirectory

2
Grazie. Aiuta quando C # .exe si trova in una cartella ma viene richiamato da un'altra cartella (ad esempio: quando è nel PATH di sistema)
DeepSpace101

14
Per .NET Core, lo è System.AppContext.BaseDirectory.
NightOwl888

15

A seconda dei diritti concessi alla tua applicazione, indipendentemente dal fatto che la copia shadow sia attiva o meno e altre opzioni di invocazione e distribuzione, metodi diversi potrebbero funzionare o produrre risultati diversi, quindi dovrai scegliere saggiamente la tua arma. Detto questo, tutto quanto segue produrrà lo stesso risultato per un'applicazione console completamente attendibile che viene eseguita localmente sulla macchina in cui risiede:

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 );

Dovrai consultare la documentazione dei membri di cui sopra per vedere le autorizzazioni esatte necessarie.



3

In .NET, è possibile utilizzare System.Environment.CurrentDirectoryper ottenere la directory da cui è stato avviato il processo.
System.Reflection.Assembly.GetExecutingAssembly().Locationti dirà la posizione dell'assembly attualmente in esecuzione (è interessante solo se l'assembly attualmente in esecuzione viene caricato da un luogo diverso dalla posizione dell'assembly in cui è iniziato il processo).


1

Su Windows (non sono sicuro di Unix ecc.) È il primo argomento nella riga di comando.

In C / C ++ il primo elemento in argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Sì, è lo stesso anche in .NET. Il primo argomento è sempre il percorso completo dell'eseguibile.
Adam Neal,

1

Application.StartUpPath;


ti interessa collegare a qualche documentazione?
John Sheehan

0

Supponiamo che il nome del progetto dell'applicazione della console principale .Net sia DataPrep.

Ottieni directory di base del progetto:

Console.WriteLine(Environment.CurrentDirectory);

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

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

Uscita: ~ DataPrep \


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.