Path.Combine absolute с относительными строками пути.

Я пытаюсь присоединиться к пути Windows с относительным путем, используя Path.Combine.

Однако Path.Combine(@"C:\blah",@"..\bling") возвращает C:\blah\..\bling вместо C:\bling\.

Кто-нибудь знает, как это сделать, не записывая собственный относительный распознаватель пути (который не должен быть слишком сложным)?

Ответ 1

Что работает:

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

(результат: absolutePath = "C:\bling.txt" )

Что не работает

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

(результат: absolutePath = "C:/blah/bling.txt" )

Ответ 3


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

Ответ 4

Это даст вам именно то, что вам нужно (путь не должен существовать для этого)

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

Ответ 5

Для окон универсальные приложения Path.GetFullPath() недоступны, вместо этого вы можете использовать класс System.Uri:

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