代码之家  ›  专栏  ›  技术社区  ›  simonalexander2005

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

  •  3
  • simonalexander2005  · 技术社区  · 15 年前

    我有一个程序可以拖网html文件并找到href标记,将字符串放入(链接),然后将其转换为文件位置。

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

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

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

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

    例如(因为它不是以“http”开头的,所以它会将它所在文件的路径附加到开头)。

    显然,这可以简化为:

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

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

    4 回复  |  直到 15 年前
        1
  •  4
  •   Noldorin    15 年前

    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
  •  7
  •   Lee    15 年前

    您可以使用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);
    
        3
  •  3
  •   David    9 年前

    Path类提供方法GetFullPath(string Path)

    例如

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

    退货

    @"\\server\webroot\folder\images\arrow.gif"
    
        4
  •  1
  •   Daren Thomas    15 年前

    看看明显的候选人:

    • Path
    • DirectoryInfo

    我打赌他们有办法做到这一点。猜想:创建一个新的 目录信息 对象,然后检查属性-可能是其中某个地方的规范路径。。。

        5
  •  1
  •   TarmoPikaro    5 年前

    请参见此处的答案:

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

    Uri 重新映射,以及 GetFullPath 反过来又涉及到文件系统操作,由于这个答案可能会比这里的其他版本更快(纯字符串操作)