Pourquoi ne Chemin.Combiner d'obtenir ce résultat avec un chemin relatif?
À ma grande surprise, ce code ne produit pas les résultats escomptés:
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath);
Le résultat est \My\Relative\Folder
à la place de l' \\server\BaseFolder\My\Relative\Folder
.
Pourquoi est-ce? Quelle est la meilleure façon de combiner les chemins relatifs qui peuvent ou peuvent ne pas avoir une barre oblique en eux?
EDIT: je suis conscient que je peux faire de manipulation de chaîne sur relativePath de détecter et de supprimer de départ de la barre oblique. Est-il un moyen plus sûr de le faire (je pensais Path.Combine
était censé être la manière la plus sûre) de prise en compte de barres obliques inverses et frontslashes?
- Ce n'est pas un chemin d'accès relatif.
- Je comprends que si il y avait 2 barres obliques à l'avant, en faisant un chemin d'accès UNC, mais un slash? Sérieusement?
- Oui; au sérieux.
\a\b
est un absolu chemin d'accès. (même si c'est par rapport à la voiture)
Vous devez vous connecter pour publier un commentaire.
Baisse de la slash sur
relativePath
et cela devrait fonctionner.La raison pour laquelle cela se produit est que le Chemin d'accès.Combiner l'interprétation est
relativePath
comme un enracinée (absolue) chemin d'accès, car, dans ce cas, il commence avec un\
. Vous pouvez vérifier si un chemin d'accès relatif ou enracinée en utilisantPath.IsRooted()
.De la doc:
Chemins qui commencent par une barre oblique sont interprétés comme étant absolue plutôt que relative. Simplement couper la barre oblique si vous voulez garantir que les
relativePath
sera considérée comme relative.