你的位置:首页 > ASP.net教程

[ASP.net教程]C#相对路径转绝对路径,绝对路径转相对路径


 

1.绝对路径转相对路径

 

绝对转相对似乎C#没有提供实现,需要自己写,这里摘选了一位博友的实现方法:

string RelativePath(string absolutePath, string relativeTo)    {      //from - www.cnphp6.com      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();    }

RelativePath

 

调用:

static void Main(string[] args){  var path = RelativePath(@"D:\MyProj\Log\MyFile.txt", @"D:\MyProj\Release");  Console.WriteLine(path);//print ..\..\Release  Console.Read();}

 

 

2.相对路径转绝对路径

 

可以直接用.Net自己的Path.GetFullPath转换

static void Main(string[] args){  var relativePath = @"..\..\Release";  Console.WriteLine(Path.GetFullPath(relativePath));  Console.Read();}