92 votes

Dois-je utiliser AppDomain.CurrentDomain.BaseDirectory ou System.Environment.CurrentDirectory ?

J'ai deux fichiers exe dans le même dossier, je peux lancer exe2 à partir d'un bouton dans exe1. Aujourd'hui, j'ai observé un client au cours d'une session à distance (services terminaux) et l'exe2 n'a pas réussi à s'exécuter (erreur "Fichier non trouvé"), alors que l'exe1 se trouvait dans le même répertoire lors de la vérification. Devrais-je donc utiliser AppDomain.CurrentDomain.BaseDirectory o Répertoire actuel de System.Environment ?

Merci

190voto

JaredPar Points 333733

Si vous voulez trouver des fichiers dans le même répertoire que votre application, AppDomain.CurrentDomain.BaseDirectory est le bon choix.

Environment.CurrentDirectory est une valeur qui peut et va changer au cours de l'exécution de votre application. Par exemple, en utilisant les paramètres par défaut, la fenêtre OpenFileDialog de WinForms remplacera cette valeur par le répertoire dans lequel le fichier a été sélectionné.

21voto

Albert Points 888

AppDomain.CurrentDomain.BaseDirectory renvoie le répertoire à partir duquel le domaine d'application actuel a été chargé.
System.Environment.CurrentDirectory renvoie le répertoire actuel du système.
Dans votre cas AppDomain.CurrentDomain.BaseDirectory est la meilleure solution.

14voto

Dalorzo Points 6449

Vous devez utiliser AppDomain.CurrentDomain.BaseDirectory .

Par exemple, dans une application de services Windows :

System.Environment.CurrentDirectory retournera C:\Windows\system32

Alors que

AppDomain.CurrentDomain.BaseDirectory retournera [l'emplacement de l'application.exe]

Un autre facteur important à noter est que AppDomain.CurrentDomain.BaseDirectory est une propriété en lecture seule tandis que la Environment.CurrentDirectory peut être autre chose si nécessaire :

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

6voto

Joel Coehoorn Points 190579

Si je comprends bien, vous devez utiliser BaseDirectory . CurrentDirectory pourrait changer au cours de l'exécution du programme.

3voto

ChanZen Points 21

Dans les projets de test de Visual studio 2010, si vous activez l'option de déploiement "Editer les paramètres de test", AppDomain.CurrentDomain.BaseDirectory pointe vers le répertoire TestResults. \Out dossier(non bin \debug ). Bien que le paramètre par défaut soit la poubelle \debug carpeta.

J'ai trouvé ici une réponse convaincante.

Pourquoi AppDomain.CurrentDomain.BaseDirectory ne contient pas "bin" dans une application asp.net ?

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