web-dev-qa-db-fra.com

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

J'essaye 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 accomplir cela sans écrire mon propre résolveur de chemin relatif (qui ne devrait pas être trop difficile)?

83
CVertex

Ce qui fonctionne:

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

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

Ce qui ne fonctionne 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")

58
Llyle

Appelez Path.GetFullPath sur le chemin 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 avec Path.Combine devrait le faire lui-même)

29
Colonel Panic

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

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;
3
Jonathan Mc Namee

Pour les applications universelles Windows Path.GetFullPath() n'est pas disponible, vous pouvez utiliser le System.Uri classe à la place:

 Uri uri = new Uri(Path.Combine(@"C:\blah\",@"..\bling"));
 Console.WriteLine(uri.LocalPath);
3
thumbmunkeys