C# 程序从两个绝对路径获取相对路径

csharpserver side programmingprogramming更新于 2025/9/18 7:26:00

简介

让我们尝试理解 C# 程序从两个绝对路径获取相对路径。我们将了解如何使用 URI(统一资源标识符)类和 MakeRelativeUri 方法。

我们首先了解绝对路径和相对路径之间的区别。绝对路径包括在系统上定位文件或目录所需的所有信息。绝对路径的一个示例是 C:\Program Files\Google Chrome\filename.exe。

相对路径告诉我们文件相对于用户正在工作的当前目录的路径。考虑上面提到的类似示例,如果主可执行文件位于 C:\Program Files 中,则 filename.exe 的相对路径为 Google Chrome\filename.exe。

我们将使用 MakeRelativeUri 方法来生成输出。在开始详细解释上述方法之前,我们应该了解类是命名空间,这是该方法的根源。我们首先了解 System.IO 命名空间,然后了解 URI 类。最后,我们将深入研究 MakeRelativeUri 方法、其代码和算法。

System.IO 命名空间

System.IO 命名空间是 C# 中多个类和方法工作的原因。它提供了各种类来帮助我们执行输入和输出操作。借助它,我们可以读取和写入文件和各种目录。它下面的一些类如下。

  • 文件 − 我们可以借助此类创建、复制、删除、移动文件。

  • 目录 − 它提供创建、删除和对目录执行各种其他操作的方法。

  • 字符串 − 它用于表示字符序列。

  • 数学 − 它提供了在 C# 程序中执行数学运算的方法。

  • 路径 − 它提供了在 C# 程序中处理文件的方法。我们可以从绝对路径中获取带扩展名和不带扩展名的文件的名称。借助此方法,我们将实现本文的目的,即从两个绝对路径中获取相对路径,

URI 类

C# 中的 Uri(统一资源标识符)类是 System.IO 命名空间中的内置类,用于识别 Internet 或文件系统中的资源。它是一个提供多种属性和方法用于处理 URI 的类。下面将解释一些 -

  • new Uri(string string1) − 使用指定的 URI 字符串初始化 Uri 类的新实例。

  • new Uri(string string1, string string2) − 它使用指定的 URI 字符串和 uriKind 初始化 Uri 类的新实例。

  • MakeRelativeUri − 它用于从两个绝对路径中获取相对路径。

创建 URI 实例的语法如下 −

Uri uri = new Uri("https://www.tutorialspoint.com");

创建 URI 实例后,您可以使用它来访问一些方法和属性。下面我们将访问的一种方法就是 MakeRelativeUri 方法。

MakeRelativeUri 方法

这是 C# 中 URI 类下的方法。它用于从两个绝对路径中查找相对路径。它是 System.IO 路径类下的一个内置方法,以两个绝对路径为输入,并返回两者之间的相对路径。在现实世界中,当您需要在两个文件之间创建链接或想要在应用程序内导航时,它很有用。

从两个绝对路径创建相对路径的语法如下 -

Uri baseUri = new Uri(" http://www.tutorialspoint.com/");
Uri absoluteUri = new Uri("http://www.tutorialspoint.com/code1");
Uri relationUri = baseUri.MakeRelativeUri(absoluteUri);
Console.WriteLine(relativeUri);

算法

下面的算法将详细理解 MakeRelativeUri 方法的概念,以及如何从两个绝对路径中找出相对路径。我们将逐步了解使用此方法的方法。

步骤 1 −  在输入参数中,我们有两个路径:绝对路径和相对路径。

步骤 2 − 我们将两个路径都以字符串的形式存储为输入。

步骤 3 − 我们将使用以下代码为它们两者创建 Uri 实例 -

Uri baseUri = new Uri(basePath);

步骤 4 − 现在我们将调用所需的方法来生成两者之间的相对路径,即 MakeRelativeUri 方法。

步骤 5 − 现在我们将结果相对路径存储在输出字符串中。

步骤 6 − 最后,我们将打印结果输出。

示例

using System;
using System.IO;
using System.Text;
class FileName {
   static void Main(string[] args) {
    String path1= @"C:\Drive\App\Images";
    
    // 这里我们以字符串的形式存储了第一个绝对路径。
    
    // 我们将字符串的名称设为 path1。
    string path2= @"C:\Drive\App\Documents\File.doc";
    
    // 我们以字符串的形式存储了第二个绝对路径。
    
    // 我们将名称设为 path2。
    Uri uri1= new Uri(path1);
    
    // 现在我们创建了 path1 的一个 Uri 实例。
    
    // 我们将其命名为 uri1。
    Uri uri2= new Uri(path2);
    
    // 我们创建了 path2 的另一个 Uri 实例。
    
    // 我们将其命名为 uri2。
    string relationPath =uri1.MakeRelativeUri(uri2).ToString();
    
    // 这里我们调用了 MakeRelativeUri 方法来生成输出。
    
    // 此处生成的输出存储了两个绝对路径的相对路径。
    
    //我们将其以字符串形式存储。
    
    //该字符串已被命名为relativePath
    string ans= "NewFolder/" +relativePath;
    Console.WriteLine(ans); //最后打印答案。
   }
}

输出

NewFolder/../Documents\File.doc

时间复杂度

在上面的代码中,我们借助了 Uri 类。Uri 类实例由输入参数创建。类实例的时间复杂度为 O(1)。同样,在下面的代码中,调用的 MakeRelativeUri 方法的时间复杂度也为 O(1)。总体而言,代码的时间复杂度为 O(1)。

结论

在本文中,我们彻底讨论了 Uri 类的使用,并了解了其中的一些方法。我们严格理解了其中一种方法,即 MakeRelativeUri 方法。

我们希望本文有助于增强您对 Uri 类和 MakeRelativeUri 方法的了解。


相关文章