2010-01-27 13 views
36

Estoy buscando algo similar al método Path.Combine que me ayudará a combinar correctamente rutas absolutas y relativas. Por ejemplo, quieroPath.Combine y la notación de puntos

Path.Combine(@"c:\alpha\beta", @"..\gamma"); 

para producir c:\alpha\gamma en lugar de c:\alpha\..\gamma como Path.Combine hace. ¿Hay alguna manera fácil de lograr esto? No hace falta decir que también quiero hacer una ruta de tiempo . o varias rutas .. (por ejemplo, ..\..\) para que funcionen correctamente.

Respuesta

54

Uso Path.GetFullPath

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
Console.WriteLine(Path.GetFullPath(path)); 

o la clase DirectoryInfo:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
DirectoryInfo info = new DirectoryInfo(path); 
Console.WriteLine(info.FullName); 

Tanto la Salida:

c:\alpha\gamma 
+3

Huh, ni siquiera sabía que existía 'GetFullPath'. Sexy. – Nick

7

Probablemente pueda hacer un Path.Combine seguido de un Path.GetFullPath.

6

se puede utilizar una combinación de 2 llamadas de este modo:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
string result = Path.GetFullPath(path); 

Y eso debería darle los resultados que está buscando.

3

Puede llamar al Path.GetFullPath para resolver esto.

Por ejemplo, este código:

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma"); 
Console.WriteLine(path); 
path = Path.GetFullPath(path); 
Console.WriteLine(path); 

imprimirá:

c:\alpha\beta\..\gamma 
c:\alpha\gamma 
0

Pero parece GetFullPath no siempre tiene la razón Probar:

Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\shareb\folderb")); 
    Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\..\shareb\folderb")); 

Ellos salida el mismo resultado , parece que no puede moverlo para ir a una acción diferente La c orrect respuesta para el segundo debe ser

\\ Machinea \ shareb \ FolderB

pero da

\\ Machinea \ Sharea \ shareb \ FolderB

tanto para

Cuestiones relacionadas