2012-10-02 7 views
1

Je dispose d'un fichier appelé settings.xml situé à:Obtention du chemin relatif du fichier?

c:\solution1\solution1\data\settings.xml

En ce moment, je fais:

XDocument doc = XDocument.Load(@"c:\solution1\solution1\settings.xml"); 

Je ne peux pas comprendre comment le faire avec un chemin relatif.

+0

Voir http://stackoverflow.com/questions/362790/what-is-the-best-way-to-determine- application-root-directory – abatishchev

Répondre

5

Si vous voulez dire par rapport à votre exécutable, vous pouvez utiliser

string exeLocation = System.Reflection.Assembly.GetExecutingAssembly().CodeBase 

Notez le souvent suggéré

System.Reflection.Assembly.GetExecutingAssembly().Location 

prendra le chemin où est trouve actuellement l'ensemble, qui peut être différent par exemple si un cliché instantané est en cours d'exécution.

Vous pouvez utiliser

string exeDir = System.IO.Path.GetDirectoryName(exeLocation); 

pour obtenir le répertoire de l'exécutable.

Si vous voulez trouver un fichier qui est dans un répertoire données sous votre emplacement d'installation, vous pouvez faire

string dataFile = Path.Combine(exeDir, "data\settings.xml"); 

Notez que sous Windows Vista et versions ultérieures, vous n'aurez pas écrire accès par défaut à un répertoire situé sous votre répertoire d'installation.

+0

Dans mon cas, mon répertoire de données ne se trouve pas sous mon répertoire exe – Xaisoft

+0

Que voulez-vous alors que le répertoire Data soit relatif * à *? –

+0

J'ai changé l'action de construction en contenu et ai copié le dossier si plus nouveau, ainsi j'utilise maintenant le chemin de répertoire d'exe. – Xaisoft

0

Vous pouvez également obtenir par rapport au répertoire courant, il a été lancé à partir

System.Environment.CurrentDirectory 
+3

Le répertoire actuel peut changer (par exemple en utilisant une boîte de dialogue de fichier). Cette solution ne fonctionnerait que par accident, et non par principe. – usr

+0

Juste parce que ça change ne veut pas dire que ce n'est pas désiré. – AlSki