[英]How to get absolute file path from base path and relative containing “..”?
[英]To relative path from base absolute
我有一個絕對文件夾路徑和文件路徑,如下所示:
C:\BaseDir
-基本文件夾
C:\BaseDir\sub\123.txt
- 位於基本文件夾中的文件路徑(但也可能包含一些子文件夾)
文件路徑的另一個示例: C:\BaseDir\file.docx
或C:\BaseDir\sub\sub1\file.exe
我需要根據基本文件夾將文件的路徑從絕對路徑轉換為相對路徑。 結果應如下所示: sub\123.txt
; file.docx
; sub\sub1\file.exe
請注意,我不希望BaseDir
在路徑中。 解決方案也應該適用於網絡文件夾( \\Server1\BaseDir\file.docx
或\\172.31.1.60\BaseDir\sub\123.txt
)。
是否有任何內置類可以做到這一點?
學分做這篇文章: 絕對到相對路徑
public static string AbsoluteToRelativePath(string pathToFile, string referencePath)
{
var fileUri = new Uri(pathToFile);
var referenceUri = new Uri(referencePath);
return referenceUri.MakeRelativeUri(fileUri).ToString();
}
現在你可以像這樣使用它
var result = AbsoluteToRelativePath(@"C:\dir\path\to\file.txt", @"C:\dir\");
您可以使用MakeRelativeUri
方法:
var basePath = @"C:\BaseDir\";
var path = @"C:\BaseDir\sub\file.docx";
var result = new Uri(basePath).MakeRelativeUri(new Uri(path));
Console.WriteLine(Uri.UnescapeDataString(result.ToString()));
使用 .NET Core 2 或更新版本時還有另一種選擇:
var basePath = @"C:\BaseDir\";
var path = @"C:\BaseDir\sub\file.docx";
var relative = Path.GetRelativePath(basePath, path);
Uri
的區別(可能是一個優勢)是,路徑不會被逃脫。 使用Uri
時,空格會被替換為%20
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.