Path.Combine absolute con cadenas de ruta relativas

Path.Combine unirme a una ruta de Windows con una ruta relativa usando Path.Combine .

Sin embargo, Path.Combine(@"C:\blah",@"..\bling") devuelve C:\blah\..\bling lugar de C:\bling\ .

¿Alguien sabe cómo lograr esto sin escribir mi propio resolvedor de ruta relativa (que no debería ser demasiado difícil)?

Que funciona:

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

(resultado: absolutePath = “C: \ bling.txt”)

Lo que no funciona

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

(resultado: absolutePath = “C: /blah/bling.txt”)

Llame a Path.GetFullPath en la ruta de acceso combinada http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

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

(Estoy de acuerdo Path.Combine debería hacer esto por sí mismo)

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

Esto le dará exactamente lo que necesita (la ruta NO debe existir para que esto funcione)

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

Para las aplicaciones universales de Windows Path.GetFullPath() no está disponible, puede usar la clase System.Uri lugar:

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