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

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

介绍

让我们来了解一下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#中多个类和方法工作的原因。它提供了各种类,可以帮助我们执行输入和输出操作。通过它的帮助,我们可以读取和写入文件和各种目录。它下面的一些类如下所示。

  • File – 我们可以使用该类创建、复制、删除、移动文件。

  • Directory – 它提供了创建、删除及执行各种其他操作的方法。

  • String – 它用于表示一系列字符。

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

  • Path – 它提供了处理C#程序中文件所需的方法。我们可以从绝对路径中使用它获取带或不带扩展名的文件名。我们将使用此方法来完成本文的目的,即从两个绝对路径获取相对路径,

URI类

URI(统一资源标识符)类是C#中的一个内置类,位于System.IO命名空间中,用于识别在互联网或文件系统中的资源。它是一个提供了多个属性和方法的类,用于处理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 Method

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

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

Uri baseUri = new Uri("http://www.tutorialspoint.com/");
Uri absoluteUri = new Uri("http://www.tutorialspoint.com/code1");
Uri relativeUri = 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);

      //我们创建了另一个名为uri2的path2的Uri实例。
      string relativePath =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方法有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程