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" )
Ответ 2
Call 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 должен сделать это сам)
Ответ 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);