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

sim*_*005 3 c# string uri path

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

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

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

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

\\server\webroot\folder\foo\bar\mew\..\..\..\images\arrow.gif
Run Code Online (Sandbox Code Playgroud)

例如(因为它不以"http"开头,它将文件的路径追加到开头).

显然,这可以简化为:

\\server\webroot\folder\images\arrow.gif
Run Code Online (Sandbox Code Playgroud)

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

Lee*_*Lee 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);
Run Code Online (Sandbox Code Playgroud)


Nol*_*rin 5

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

var absoluteUrl = this.Server.MapPath("../../../images/arrow.gif");
// absoluteUrl = "\\server\webroot\folder\images\arrow.gif"
Run Code Online (Sandbox Code Playgroud)

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

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

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