Estou tentando juntar um caminho do Windows com um caminho relativo usando Path.Combine
.
No entanto, Path.Combine(@"C:\blah",@"..\bling")
retorna em C:\blah\..\bling
vez de C:\bling\
.
Alguém sabe como fazer isso sem escrever meu próprio resolvedor de caminho relativo (o que não deve ser muito difícil)?
Respostas:
O que funciona:
(resultado: absolutePath = "C: \ bling.txt")
O que não funciona
(resultado: absolutePath = "C: /blah/bling.txt")
fonte
C:\\blah..\\bling.txt
e isso não funcionará. Nesse caso, você pode adicioná-los manualmente à string ou fazerPath.GetFullPath(Path.Combine(baseDirectory, relativePath))
C:\bling.txt
?Chame Path.GetFullPath no caminho combinado http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx
(Eu concordo que o Path.Combine deve fazer isso sozinho)
fonte
Path.GetFullPath(Path.Combine(@"..\..\blah",@"\bling"))
fonte
c:\windows\system32
Para aplicativos universais do Windows
Path.GetFullPath()
não disponíveis, você pode usar aSystem.Uri
classe em seu lugar:fonte
Isso lhe dará exatamente o que você precisa (o caminho NÃO precisa existir para que funcione)
fonte
Tenha cuidado com as barras invertidas, não se esqueça delas (nem use duas vezes :)
fonte
Path.GetFullPath()
não funciona com caminhos relativos.Esta é a solução que funciona com caminhos relativos + absolutos. Funciona tanto em Linux + Windows e mantém
..
como esperado no início do texto (em repouso eles serão normalizados). A solução ainda dependePath.GetFullPath
de fazer a correção com uma pequena solução alternativa.É um método de extensão, então use-o como
text.Canonicalize()
fonte