c# - net - pathcombine
Path.Combine y la notaciĆ³n de puntos (5)
Pero parece que GetFullPath no siempre es correcto. Probar:
Console.WriteLine(System.IO.Path.GetFullPath(@"//machine/sharea/foldera/../shareb/folderb"));
Console.WriteLine(System.IO.Path.GetFullPath(@"//machine/sharea/foldera/../../shareb/folderb"));
Muestran el mismo resultado, parece que no puede moverlo para ir a un recurso compartido diferente. La respuesta correcta para el segundo debe ser
// machinea / shareb / folderb
pero da
// machinea / sharea / shareb / folderb
para ambos
Esta pregunta ya tiene una respuesta aquí:
- Path.Combine absolute con cadenas de ruta relativas 5 respuestas
Estoy buscando algo similar al método Path.Combine
que me ayudará a combinar correctamente rutas absolutas y relativas. Por ejemplo, quiero
Path.Combine(@"c:/alpha/beta", @"../gamma");
ceder c:/alpha/gamma
lugar de c:/alpha/../gamma
como Path.Combine
hace Path.Combine
. ¿Hay alguna manera fácil de lograr esto? No hace falta decir que también quiero hacer un punto .
ruta o múltiples ..
rutas (por ejemplo, ../../
) para que funcionen correctamente.
Probablemente pueda hacer un Path.Combine seguido de un Path.GetFullPath.
Puede llamar a 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);
Se imprimirá:
c:/alpha/beta/../gamma
c:/alpha/gamma
Use 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);
Ambos producirán:
c:/alpha/gamma
podrías usar una combinación de 2 llamadas como estas:
string path = Path.Combine(@"c:/alpha/beta", @"../gamma");
string result = Path.GetFullPath(path);
Y eso debería darte los resultados que estás buscando.