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

问题描述:

我有一个程序,它可以拖拽html文件并找到href标签,将内部字符串(链接)并将其转换为文件位置。将相对路径转换为绝对路径C#

问题是当在href标记使用相对链接,如:

<a href="../../../images/arrow.gif"/>

在这种情况下,我的程序返回:

\\server\webroot\folder\foo\bar\mew\..\..\..\images\arrow.gif 

例如(因为它没有启动使用“http”,它会将文件的路径附加到开头)。

显然,这可以简化为:

\\server\webroot\folder\images\arrow.gif 

是否有一个对象,可以做这样的简化,或做我需要做一些字符串解析 - 如果是这样什么是最好的方法是什么?

+0

这两个答案似乎假设你的应用程序运行在不同的模式(即,本地文件系统与通过网络检索文件,使用URLS。)请澄清您的问题,以使您接受的任何答案清楚。 (他们都是他们的作者假设点。) – 2010-07-15 13:08:50

我假设你在这里使用ASP.NET。在这种情况下,我认为你只需要Server.MapPath函数返回文件的实际URI。

var absoluteUrl = this.Server.MapPath("../../../images/arrow.gif"); 
// absoluteUrl = "\\server\webroot\folder\images\arrow.gif" 

this指的当然是当前页面您可以随时使用HttpContext.Current.Server相反,如果出于某种原因不提供。)

注: 如果你想手工做的事情,你已经有了一个特定的字符串,如“\服务器\ webroot的\文件夹\”,那么应该做的工作的System.IO.Path功能我会想:

var absoluteUri = Path.GetFullPath(Path.Combine("\\server\webroot\folder\", 
    "../../../images/arrow.gif")); 
+0

其实我只是使用普通的旧C#和手动扫描源代码... – simonalexander2005 2010-07-15 13:03:26

+0

在这种情况下,查看我的更新。 :) – Noldorin 2010-07-15 13:03:53

+0

Path.GetFullPath(“\\ server \ webroot \ folder \ foo \ bar \ mew \ .. \ .. \ .. \ images \ arrow.gif”)完成这项工作 - 很好,谢谢:) – simonalexander2005 2010-07-15 13:14:44

退房显而易见的候选者

  • Path
  • DirectoryInfo

我敢打赌,他们有一些方法来做到这一点。猜测:你的路径创建一个新的DirectoryInfo对象,然后检查属性 - 可能规范的路径在某处有...

可以使用Uri类把它们结合在一起:

Uri root = new Uri(@"\\server\webroot\folder\foo\bar\mew\", UriKind.Absolute); 
Uri relative = new Uri("../../../images/arrow.gif", UriKind.Relative); 

Uri comb = new Uri(root, relative); 
+0

好方法:) – 2014-01-29 12:35:57

Path类提供该方法GetFullPath(字符串路径)

例如

Path.GetFullPath(@"\\server\webroot\folder\foo\bar\mew\..\..\..\images\arrow.gif") 

返回

@"\\server\webroot\folder\images\arrow.gif"