Devo usare AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory?


86

Ho due file exe nella stessa cartella, posso eseguire exe2 da un pulsante in exe1. Oggi stavo osservando un cliente su una sessione remota (servizi terminal) e exe2 non è riuscito a eseguire l'errore "File non trovato", tuttavia exe1 era nella stessa directory quando abbiamo controllato. Quindi dovrei usare AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory ?

Grazie


@ Jade M Come stai eseguendo il tuo exe1 al terminale?
signora Sonia

Voglio aggiungere i miei due centesimi dicendo che string.GetFullPath(path)usa Environment.CurrentDirectorypiuttosto che CurrentDomain.BaseDirectory, con mia sorpresa.
JBSnorro

Risposte:


186

Se vuoi trovare file nella stessa directory della tua applicazione, AppDomain.CurrentDomain.BaseDirectoryè la scelta giusta.

Environment.CurrentDirectoryè un valore che può cambiare e cambierà nel corso dell'esecuzione dell'applicazione. Ad esempio, utilizzando i parametri predefiniti, OpenFileDialog in WinForms cambierà questo valore nella directory da cui è stato selezionato il file.


Ho usato button1 per mostrare OpenFileDialog, quindi button2 per mostrare Environment.CurrentDirectory, ma mostra ancora la cartella di debug, perché?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectoryrestituisce la directory da cui è stato caricato il dominio dell'applicazione corrente.
System.Environment.CurrentDirectoryrestituisce la directory di sistema corrente.
Nel tuo caso AppDomain.CurrentDomain.BaseDirectoryè la soluzione migliore.


1
Per essere chiari, System.Environment.CurrentDirectory restituisce la directory di lavoro corrente (specifica del processo) .
Oskar Berggren

14

Dovresti usare AppDomain.CurrentDomain.BaseDirectory.

Ad esempio in un'applicazione di servizi Windows:

System.Environment.CurrentDirectoryrestituirà C: \ Windows \ system32

Mentre

AppDomain.CurrentDomain.BaseDirectory restituirà [percorso Application.exe]

Un altro fattore importante da notare è che AppDomain.CurrentDomain.BaseDirectoryè una proprietà di sola lettura mentre Environment.CurrentDirectorypuò essere qualcos'altro se necessario:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

6

A quanto ho capito, dovresti usare BaseDirectory. CurrentDirectorypotrebbe cambiare nel corso dell'esecuzione del programma.



2

Di solito uso qualcosa come:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

Ho anche passato questo pochi giorni fa, mentre stavo usando

Environment.CurrentDirectory

poiché mi dava problemi sul server di produzione ma funzionava bene con il mio server locale,

Quindi, ho provato con

System.AppDomain.CurrentDomain.BaseDirectory;

E ha funzionato per me sia nell'ambiente.

Quindi, come hanno detto tutti loro, dovremmo sempre andare con

System.AppDomain.CurrentDomain.BaseDirectory;

poiché controlla la directory del dominio corrente per il percorso.

dai un'occhiata per ulteriori informazioni

Impossibile trovare una parte dell'errore di percorso sul server

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.