web-dev-qa-db-fra.com

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

J'ai deux fichiers exe dans le même dossier, je peux exécuter exe2 à partir d'un bouton dans exe1. Aujourd'hui, j'observais un client sur une session distante (services terminaux) et exe2 n'a pas réussi à exécuter l'erreur "Fichier non trouvé", mais exe1 était dans le même répertoire lorsque nous avons vérifié. Dois-je donc utiliser AppDomain.CurrentDomain.BaseDirectory ou System.Environment.CurrentDirectory ?

Merci

80
Jade M

Si vous souhaitez rechercher 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, OpenFileDialog dans WinForms changera cette valeur dans le répertoire dans lequel le fichier a été sélectionné.

174
JaredPar

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

17
Albert

Tu devrais utiliser AppDomain.CurrentDomain.BaseDirectory.

Par exemple, dans une application de services Windows:

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

Tandis que

AppDomain.CurrentDomain.BaseDirectory renverra [emplacement Application.exe]

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

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

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

6
Joel Coehoorn

Dans les projets de test Visual studio 2010, si vous activez l'option de déploiement de Modifier les paramètres de test, AppDomain.CurrentDomain.BaseDirectory pointe vers le dossier TestResults\Out (pas bin\debug). Cependant, le paramètre par défaut pointe vers le dossier bin\debug.

Ici, j'ai trouvé une réponse convaincante.

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

3
OrganicCoder

J'utilise habituellement quelque chose comme:

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

J'ai également vécu ces quelques jours, car j'utilisais

Environment.CurrentDirectory

car cela me posait un problème sur le serveur de production mais fonctionnait bien avec mon serveur local,

J'ai donc essayé avec

System.AppDomain.CurrentDomain.BaseDirectory;

Et cela a fonctionné pour moi dans l'environnement.

Donc, comme tous l'ont dit, nous devrions toujours

System.AppDomain.CurrentDomain.BaseDirectory;

car il vérifie le répertoire du domaine actuel pour le chemin d'accès.

jetez un oeil pour plus d'informations

Impossible de trouver une partie de l'erreur de chemin sur le serveur

2
B N