C# 将绝对路径转换为相对路径

版权所有,禁止匿名转载;禁止商业使用。

在项目中常需要将绝对路径,转换为相对路径,来增加程序相关配置的的灵活性(不用因为整体挪个位置就导致我们的程序不能正常工作)

解决问题方法

自己写代码解决:

private string RelativePath(string absolutePath, string relativeTo)

        {

  string[] absoluteDirectories = absolutePath.Split('\\');

  string[] relativeDirectories = relativeTo.Split('\\');
  //Get the shortest of the two paths
  int length = absoluteDirectories.Length < relativeDirectories.Length ? absoluteDirectories.Length : relativeDirectories.Length;
  //Use to determine where in the loop we exited
  int lastCommonRoot = -1;
  int index;
  //Find common root
  for (index = 0; index < length; index++)
      if (absoluteDirectories[index] == relativeDirectories[index])
          lastCommonRoot = index;
      else
          break;
  //If we didn't find a common prefix then throw
  if (lastCommonRoot == -1)
      throw new ArgumentException("Paths do not have a common base");
  //Build up the relative path
  StringBuilder relativePath = new StringBuilder();
  //Add on the ..
  for (index = lastCommonRoot + 1; index < absoluteDirectories.Length; index++)
      if (absoluteDirectories[index].Length > 0)
          relativePath.Append("..\\");
  //Add on the folders
  for (index = lastCommonRoot + 1; index < relativeDirectories.Length - 1; index++)
      relativePath.Append(relativeDirectories[index] + "\\");
  relativePath.Append(relativeDirectories[relativeDirectories.Length - 1]);
  return relativePath.ToString();
        }
通过C#中URI类来解决:
System.Uri uri1 = new Uri(@"C:\filename.txt");
System.Uri uri2 = new Uri(@"C:\mydirectory\anotherdirectory\");
 
Uri relativeUri = uri2.MakeRelativeUri(uri1);
 
Console.WriteLine(relativeUri.ToString());

 

0 0