簡體   English   中英

從基本絕對路徑到相對路徑

[英]To relative path from base absolute

我有一個絕對文件夾路徑和文件路徑,如下所示:

C:\BaseDir -基本文件夾

C:\BaseDir\sub\123.txt - 位於基本文件夾中的文件路徑(但也可能包含一些子文件夾)

文件路徑的另一個示例: C:\BaseDir\file.docxC:\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.

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