[英]Why does Path.Combine produce this result with a relative path?
令我驚訝的是,此代碼不會產生預期的結果:
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath);
結果是\\My\\Relative\\Folder
而不是預期的\\\\server\\BaseFolder\\My\\Relative\\Folder
。
為什么是這樣? 將相對路徑組合在一起的最佳方法是什么?這些路徑可能有也可能沒有斜線?
編輯:我知道我可以在relativePath上進行字符串操作來檢測並刪除起始斜杠。 有沒有更安全的方式來做這個(我認為Path.Combine
應該是安全的方式),這將解釋反斜杠和前沿?
刪除relativePath
上的前導斜杠,它應該可以工作。
發生這種情況的原因是Path.Combine將relativePath
解釋為有根(絕對)路徑,因為在這種情況下,它以\\
開頭。 您可以使用Path.IsRooted()
檢查路徑是相對路徑還是根路徑。
來自doc :
如果后續路徑之一是絕對路徑,則組合操作從該絕對路徑開始重置,丟棄所有先前組合路徑。
以斜杠開頭的路徑被解釋為絕對路徑而不是相對路徑。 如果要保證relativePath
將被視為相對,請簡單地修剪斜杠。
var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";
var combinedPath = Path.Combine(basePath, relativePath.TrimStart('/', '\\'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.