Path.Combine абсолют с относительными строками пути - PullRequest
83 голосов
/ 22 марта 2009

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

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

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

Ответы [ 5 ]

57 голосов
/ 19 августа 2009

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

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

29 голосов
/ 20 мая 2013

Вызовите Path.GetFullPath по комбинированному пути http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

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

(я согласен, Path.Combine должен сделать это сам)

15 голосов
/ 22 марта 2009

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

3 голосов
/ 17 июля 2013

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

DirectoryInfo di = new DirectoryInfo(@"C:\blah\..\bling");
string cleanPath = di.FullName;
2 голосов
/ 31 мая 2016

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

 Uri uri = new Uri(Path.Combine(@"C:\blah\",@"..\bling"));
 Console.WriteLine(uri.LocalPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...