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