Je veux créer un programme qui convertit des fichiers. Je voudrais que l'utilisateur puisse placer le fichier exécutable dans n'importe quel répertoire et lors de l'exécution de ce programme (en double-cliquant sur le fichier .exe), je souhaite que le programme traite tous les fichiers du dossier actuel contenant le fichier exe existe . Comment le programme peut-il déterminer le chemin dans lequel il s'exécute actuellement?
J'ai essayé System.Windows.Forms.Application.StartupPath
mais cela semble être le mauvais sens.
Des idées?
Vous devez pas utiliser Directory.GetCurrentDirectory()
dans votre cas, car le répertoire en cours peut différer du dossier d'exécution, en particulier lorsque vous exécutez le programme via un raccourci.
Il vaut mieux utiliser Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
pour vos besoins. Cela retourne le chemin d'accès où réside l'assembly en cours d'exécution.
Bien que mon approche suggérée permette de différencier l’Assemblée d’exécution, l’Assemblée d’entrée ou toute autre Assemblée chargée, comme le dit Soner Gönül dans sa réponse,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
peut également être suffisant. Ce serait égal à
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
System.AppDomain.CurrentDomain.BaseDirectory
Cela vous donnera le répertoire courant de votre application. Cela fonctionne même pour les applications Web. Ensuite, vous pouvez accéder à votre fichier.
J'ai créé une application console simple avec le code suivant:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);
J'ai copié l'exécutable résultant dans C:\temp2
. J'ai ensuite placé un raccourci vers cet exécutable dans C:\temp3
et je l'ai exécuté (une fois à partir de l'exécutable lui-même et une fois à partir du raccourci). Il a donné les sorties suivantes les deux fois:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Bien que je sois sûr, il doit y avoir une {une}} raison cockamamie pour expliquer pourquoi il existe cinq méthodes différentes qui font pratiquement la même chose, je ne sais certainement pas ce que c'est. Néanmoins, il semblerait que dans la plupart des cas, vous êtes libre de choisir celui que vous préférez.
UPDATE: J'ai modifié les propriétés du raccourci en remplaçant le champ "Démarrer dans:" par C:\temp3
. Cela a abouti à la sortie suivante:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
... qui démontre au moins certains des distinctions entre les différentes méthodes.
Essaye ça:
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Renvoie les informations de répertoire pour la chaîne de chemin d'accès spécifiée.
Obtient le chemin du fichier exécutable qui a lancé l'application, y compris le nom de l'exécutable.
Utilisez ceci,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
Vous pouvez aussi l'utiliser.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
pour .NET CORE use System.AppContext.BaseDirectory
(en remplacement de AppDomain.CurrentDomain.BaseDirectory
)
Utilisez Application.StartupPath
pour obtenir le meilleur résultat imo.
Si vous voulez le chemin exe, vous pouvez utiliser System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly (). Location);