Pregunta Path.Combine absolute con cadenas de ruta relativas


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

Sin embargo, Path.Combine(@"C:\blah",@"..\bling") devoluciones C:\blah\..\bling en 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)?


76
2018-03-22 04:50


origen


Respuestas:


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")


54
2017-08-19 11:33



Llamar a Path.GetFullPath en la ruta 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)


22
2018-05-20 09:44




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


14
2018-03-22 05:09



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;

3
2017-07-17 10:31



Para aplicaciones universales de windows Path.GetFullPath() no está disponible, puedes usar System.Uri clase en cambio:

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

2
2018-05-31 20:13