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

时间:2010-07-15 12:56:46

标签: c# string path uri

我有一个程序可以搜索html文件并找到href标签,将字符串置于内部(链接),然后将其转换为文件位置。

当href标签使用相对链接时会出现问题,例如:

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

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

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

(因为它不以“http”开头,它会将文件的路径追加到开头)。

显然,这可以简化为:

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

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

5 个答案:

答案 0 :(得分:6)

您可以使用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);

答案 1 :(得分:3)

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

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

this当然是指当前页面。如果由于某种原因无效,您可以随时使用HttpContext.Current.Server。)

注意: 如果您想手动执行操作并且已经有一个特定的字符串,例如“\ server \ webroot \ folder \”,则System.IO.Path的功能应该完成我认为的工作:

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

答案 2 :(得分:3)

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

例如

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

返回

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

答案 3 :(得分:1)

查看明显的候选人:

  • Path
  • DirectoryInfo

我敢打赌他们有一些方法可以做到这一点。猜猜:为你的路径创建一个新的DirectoryInfo对象然后检查属性 - 可能是那里的规范路径......

答案 4 :(得分:1)

在此处查看答案

https://stackoverflow.com/a/42939289/2338477

更好,因为它不需要重新映射Uri的路径,并且GetFullPath依次涉及文件系统操作,并且由于此答案可能比此处的其他版本更快。 (纯字符串操作)