example - path combine c# asp net
¿Por qué Path.Combine produce este resultado con una ruta relativa? (2)
Las rutas que comienzan con una barra inclinada se interpretan como absolutas que relativas. Simplemente recorte la barra diagonal si desea garantizar que relativePath
se tratará como relativo.
var basePath = @"//server/BaseFolder";
var relativePath = @"/My/Relative/Folder";
var combinedPath = Path.Combine(basePath, relativePath.TrimStart(''/'', ''//'));
Para mi sorpresa, este código no produce los resultados esperados:
var basePath = @"//server/BaseFolder";
var relativePath = @"/My/Relative/Folder";
var combinedPath = Path.Combine(basePath, relativePath);
El resultado es /My/Relative/Folder
lugar de la esperada //server/BaseFolder/My/Relative/Folder
.
¿Por qué es esto? ¿Cuál es la mejor manera de combinar rutas relativas que pueden o no tener una barra diagonal?
EDITAR: Soy consciente de que solo puedo realizar la manipulación de cadenas en relativePath para detectar y eliminar una barra diagonal inicial. ¿Hay una forma más segura de hacer esto (pensé que se suponía que Path.Combine
era la forma más segura) que representaría las barras invertidas y las barras delanteras?
Suelte la barra diagonal inicial en relativePath
y debería funcionar.
La razón por la que esto sucede es que Path.Combine interpreta relativePath
como una ruta enraizada (absoluta) porque, en este caso, comienza con una /
. Puede verificar si una ruta es relativa o está enraizada usando Path.IsRooted()
.
Desde el doc :
Si una de las rutas subsiguientes es una ruta absoluta, la operación de combinación se reinicia a partir de esa ruta absoluta, descartando todas las rutas combinadas anteriores.