2012-06-12 9 views
41

ho cercato di ottenere la directory dell'applicazione console usando il codice seguente,Come ottenere l'esecuzione di directory di un'applicazione console

Assembly.GetExecutingAssembly().Location 

ma questo mi dà in cui risiede montare. Questo potrebbe essere diverso da dove ho eseguito l'applicazione.

L'applicazione della mia console analizza i registri senza parametri. Deve andare alla cartella logs/ all'interno della cartella dell'eseguibile o se gli do un percorso a logs/ lo analizza.

+0

Date un'occhiata a questa domanda: http://stackoverflow.com/questions/ 674857/should-i-use-appdomain-currentdomain-basedirectory-or-system-environment-current – Karsten

risposta

69

Utilizzare Environment.CurrentDirectory.

Ottiene o imposta il percorso completo della directory di lavoro corrente.
(MSDN Environment.CurrentDirectory Property)

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs"); 

Se l'applicazione è in esecuzione in c: \ Foo \ BarlogsDirectory punterà c: \ Foo \ Bar \ logs.

+15

Current Directory è diverso dalla directory tory contenente l'eseguibile corrente. – KFL

+0

Environment.CurrentDirectory è un valore che può essere modificato durante l'esecuzione dell'applicazione. Ad esempio, utilizzando i parametri predefiniti, OpenFileDialog in WinForms cambierà questo valore nella directory in cui è stato selezionato il file da –

6

modo più sicuro:

string temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
+3

Il CodeBase è un URL del percorso in cui è stato trovato il file, mentre il percorso è il percorso da cui si trovava effettivamente caricato. Ad esempio, se l'assembly è stato scaricato da Internet, il suo CodeBase potrebbe iniziare con "http: //", ma la sua posizione potrebbe iniziare con "C: \". Se il file è stato copiato in ombra, la posizione sarebbe il percorso verso la copia del file nella directory di copia shadow. È inoltre utile sapere che CodeBase non è garantito per gli assembly nel GAC. La posizione sarà sempre impostata per gli assembly caricati da disco, tuttavia. –

+0

Assicurandosi che il file sia su disco, io uso questa versione per ottenere un percorso "regolare" invece di un 'file: //' percorso: 'Path.GetDirectoryName (nuovo Uri (this.GetType(). Assembly.GetName() .CodeBase) .LocalPath) ' – Timo

16

Utilizzare questa:

System.Reflection.Assembly.GetExecutingAssembly().Location 

combinano con

System.IO.Path.GetDirectoryName if all you want is the directory. 
+2

[Source] (http://stackoverflow.com/a/837501/397322) – William

+0

Se utilizzo Environment.CurrentDirectory che viene eseguito in Attività pianificata, verrà spostato in C: \ Windows \ system32 \ log che non è il percorso di esecuzione. Quindi uso questo System.Reflection.Assembly.GetExecutingAssembly(). Location, punta al mio percorso di esecuzione exe corretto. Grazie! – LifeiSHot

+0

Questo potrebbe non funzionare come si spera in unit test o progetti Web che eseguono IIS locale. La risposta 'CodeBase' fa. – Timo

Problemi correlati