web-dev-qa-db-fra.com

Obtenir le chemin du dossier actuel

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?

171
user2214609

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);
271
Thorsten Dittmar
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.

101
hakan

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.

26
kmote
23
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

De Path.GetDirectoryName

Renvoie les informations de répertoire pour la chaîne de chemin d'accès spécifiée.

De Application.ExecutablePath

Obtient le chemin du fichier exécutable qui a lancé l'application, y compris le nom de l'exécutable.

20
Soner Gönül

Utilisez ceci,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

Vous pouvez aussi l'utiliser.

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
16
fhnaseer

1.

Directory.GetCurrentDirectory();

2.

Thread.GetDomain().BaseDirectory

3.

Environment.CurrentDirectory
6
Tomtom

pour .NET CORE use System.AppContext.BaseDirectory

(en remplacement de AppDomain.CurrentDomain.BaseDirectory

3
yonatan

Utilisez Application.StartupPath pour obtenir le meilleur résultat imo. 

0
farosch

Si vous voulez le chemin exe, vous pouvez utiliser System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly (). Location);

0
Howard Rothenburg