123 votes

Path.Combine absolu avec des chaînes de chemin relatif

J'essaie de joindre un chemin Windows avec un chemin relatif en utilisant Path.Combine .

Cependant, Path.Combine(@"C:\blah",@"..\bling") renvoie C:\blah\..\bling au lieu de C:\bling\ .

Est-ce que quelqu'un sait comment y parvenir sans écrire mon propre résolveur de chemin relatif (qui ne devrait pas être trop difficile)?

87voto

vanslly Points 2219

Ce qui fonctionne:

 string relativePath = "..\\bling.txt";
string baseDirectory = "C:\\blah\\";
string absolutePath = Path.GetFullPath(baseDirectory + relativePath);
 

(résultat: absolutePath = "C: \ blah \ bling.txt")

Ce qui ne marche pas

 string relativePath = "..\\bling.txt";
Uri baseAbsoluteUri = new Uri("C:\\blah\\");
string absolutePath = new Uri(baseAbsoluteUri, relativePath).AbsolutePath;
 

(résultat: absolutePath = "C: /blah/bling.txt")

50voto

Colonel Panic Points 18390

Appelez Path.GetFullPath sur le chemin d'accès combiné http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

 > Path.GetFullPath(Path.Combine(@"C:\blah\",@"..\bling"))
C:\bling
 

(Je suis d'accord Path.Combine devrait le faire par lui-même)

46voto

Brian Points 82719

Je suis également ennuyé par cela. Le cadre est moche IMO quand il s'agit de la canonisation simple.

Découvrez Path.GetFullPath (qui touche le système de fichiers!) Et éventuellement System.Uri.

19voto

shahkalpesh Points 21553

Path.GetFullPath(@"c:\windows\temp\..\system32")?

4voto

Cela vous donnera exactement ce dont vous avez besoin (le chemin ne doit PAS exister pour que cela fonctionne)

 DirectoryInfo di = new DirectoryInfo(@"C:\blah\..\bling");
string cleanPath = di.FullName;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X