簡體   English   中英

為什么Path.Combine會使用相對路徑生成此結果?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM