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

86

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 lors d'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é. Devrais-je donc utiliser AppDomain.CurrentDomain.BaseDirectory ou System.Environment.CurrentDirectory ?

Merci

Nathan Baulch
la source
@Jade M Comment exécutez-vous votre exe1 sur le terminal?
Mme Sonia
Je veux ajouter mes deux cents en disant que cela string.GetFullPath(path)utilise Environment.CurrentDirectoryplutôt que CurrentDomain.BaseDirectory, à ma grande surprise.
JBSnorro

Réponses:

186

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

Environment.CurrentDirectoryest une valeur qui peut changer et changera 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 en le répertoire dans lequel le fichier a été sélectionné.

JaredPar
la source
J'ai utilisé button1 pour afficher OpenFileDialog, puis button2 pour afficher Environment.CurrentDirectory, mais toujours afficher le dossier de débogage, pourquoi?
Lei Yang
18

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

Albert
la source
1
Pour être clair, System.Environment.CurrentDirectory renvoie le répertoire de travail actuel (spécifique au processus) .
Oskar Berggren
14

Vous devriez utiliser AppDomain.CurrentDomain.BaseDirectory.

Par exemple dans une application de services Windows:

System.Environment.CurrentDirectoryrenverra C: \ Windows \ system32

Tandis que

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

Un autre facteur important à noter est qu'il AppDomain.CurrentDomain.BaseDirectorys'agit d'une propriété en lecture seule alors que le Environment.CurrentDirectorypeut être autre chose si nécessaire:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   
Dalorzo
la source
6

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

Joël Coehoorn
la source
2

J'utilise généralement quelque chose comme:

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

J'ai également vécu ces quelques jours en arrière, car j'utilisais

Environment.CurrentDirectory

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

Alors, j'ai essayé avec

System.AppDomain.CurrentDomain.BaseDirectory;

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

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

System.AppDomain.CurrentDomain.BaseDirectory;

car il vérifie le répertoire du domaine actuel pour le chemin.

regardez pour plus d'informations

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

hud
la source