To my surprise, this code does not produce expected results:
var basePath = @\"\\\\server\\BaseFolder\";
var relativePath = @\"\\My\\Relative\\Folder\";
var
Drop the leading slash on relativePath
and it should work.
The reason why this happens is that Path.Combine is interpreting relativePath
as a rooted (absolute) path because, in this case, it begins with a \
. You can check if a path is relative or rooted by using Path.IsRooted()
.
From the doc:
If the one of the subsequent paths is an absolute path, then the combine operation resets starting with that absolute path, discarding all previous combined paths.
Paths that start with a slash are interpreted as being absolute rather than relative. Simply trim the slash off if you want to guarantee that relativePath
will be treated as relative.
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath.TrimStart('/', '\\'));