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类

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://tutorialspoint.com”);

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

MakeRelativeUri方法

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

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

Uri baseUri = new Uri(" https://tutorialspoint.com/");
Uri absoluteUri = new Uri("https://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"; 
      
      // here we have stored the first absolute path in the form of a string.
      
      // we have taken the name of the string as path1.
      string path2=  @"C:\Drive\App\Documents\File.doc";
      
      // we have stored the second absolute path in the form of a string.
      
      //we have taken the name path2.
      Uri uri1= new Uri(path1);
      
      //now we have created a Uri instance of path1.
      
      // we have named it uri1.
      Uri uri2= new Uri(path2);
      
      // we have created another Uri instance of path2.
      
      // we have named it uri2.
      string relativePath =uri1.MakeRelativeUri(uri2).ToString();
      
      //here we have called the MakeRelativeUri method in order to generate the output.
      
      // the output generated here stores the relative path from two absolute paths.
      
      //we have stored it in the form of a string.
      
      //the string has been named as relativePath
      string ans= "NewFolder/" + relativePath;
      Console.WriteLine(ans); // the answer is printed finally.
   }
}

输出

NewFolder/../Documents\File.doc

时间复杂度

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

结论

在本文中,我们深入讨论了Uri类的使用,并且还了解了它的一些方法。我们深入理解了一种方法,即MakeRelativeUri方法。

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

更新于:2023年4月21日

5000+ 次浏览

开启你的职业生涯

完成课程并获得认证

开始学习
广告