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
string.GetFullPath(path)
utiliseEnvironment.CurrentDirectory
plutôt queCurrentDomain.BaseDirectory
, à ma grande surprise.Réponses:
Si vous souhaitez trouver des fichiers dans le même répertoire que votre application,
AppDomain.CurrentDomain.BaseDirectory
c'est le bon choix.Environment.CurrentDirectory
est 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é.la source
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
c'est la meilleure solution.la source
Vous devriez utiliser
AppDomain.CurrentDomain.BaseDirectory
.Par exemple dans une application de services Windows:
System.Environment.CurrentDirectory
renverra C: \ Windows \ system32Tandis que
AppDomain.CurrentDomain.BaseDirectory
renverra [emplacement Application.exe]Un autre facteur important à noter est qu'il
AppDomain.CurrentDomain.BaseDirectory
s'agit d'une propriété en lecture seule alors que leEnvironment.CurrentDirectory
peut être autre chose si nécessaire:// Change the directory to AppDomain.CurrentDomain.BaseDirectory Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
la source
Si je comprends bien, vous devriez utiliser
BaseDirectory
.CurrentDirectory
pourrait changer au cours de l'exécution du programme.la source
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?
la source
J'utilise généralement quelque chose comme:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); AppPath = AppPath.Replace("file:\\", "");
la source
J'ai également vécu ces quelques jours en arrière, car j'utilisais
car cela me posait un problème sur le serveur de production mais fonctionnait bien avec mon serveur local,
Alors, j'ai essayé avec
Et cela a fonctionné pour moi à la fois dans l'environnement.
Donc, comme tous l'ont dit, nous devrions toujours aller avec
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
la source