Répertoire de travail courant de la ligne de commande dans une application console

Duplication possible:
Comment puis-je trouver le répertoire dans lequel mon application de console est exécutée avec C #?

Comment obtenir le répertoire de travail actuel d’une console qui exécute un programme afin que je puisse résoudre les chemins d’access relatifs passés sous forme d’arguments de programme?

Disons que j’ai mis mon programme ici: c:\tools\program.exe Mais je l’invoque à différents endroits. Disons que je suis ici: C:\Users\Me\Documents\ et que je lance cette commande program.exe --src=somefile.txt --dest=subdir\otherfile.txt

Environment.CurrentDirectory et System.Reflection.Assembly.GetExecutingAssembly().Location retournera c:\tools mais je voudrais pouvoir résoudre des somefile.txt et subdir\oterfile.txt relatifs à C:\Users\Me\Documents\ .

====== MISE À JOUR ======

Merci de votre aide. Il semble que Environment.CurrentDirectory fonctionne comme prévu. Il s’est avéré que dans mon cas, le problème était dû à l’outil Postbuild de Xenocode (maintenant appelé Spoon Virtual Application Studio) que j’utilisais occasionnellement pour “regrouper” tous les fichiers du programme (y compris dlls, config, etc.) en un seul exécutable. C’est très pratique, mais dans ce cas, la fonctionnalité “virtualisation” a gâché les variables d’ Environment mon programme. J’ai réussi à résoudre ce problème.

Environment.CurrentDirectory vous donne le répertoire de travail actuel

Permettez-moi de montrer un exemple simple:

 class Program { static void Main(ssortingng[] args) { Console.WriteLine("Startup: " + Environment.CurrentDirectory); Environment.CurrentDirectory = @"D:\temp"; Console.WriteLine("After:" + Environment.CurrentDirectory); } } 

Maintenant, je crée deux dossiers nommés D:\temp et D:\temp2
Je mets l’exécutable dans D:\temp
Ouvrez une invite de commande et définissez le répertoire de travail en cours avec cd D:\temp2
À partir de ce répertoire, je lance ..\temp\mytestapp.exe

la sortie est

 Startup: D:\temp2 After: D:\temp 

Comme une curiosité:

c’était la documentation pour Environment.CurrentDirectory dans Net 1.1

Obtient et définit le chemin d’access complet du répertoire en cours; c’est-à-dire le répertoire à partir duquel ce processus démarre.

et c’est la documentation dans NET 4.0

Obtient ou définit le chemin d’access complet du répertoire de travail en cours.

Utilisez les classes Environment et Path . http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

 var fqn = Path.Combine(Environment.CurrentDirectory, "somefile.txt") 

Mais pour jouer avec vos documents, il vous faut:

 var fqn = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Person), "somefile.txt"); 

`fqn ‘est TLA pour un nom complet