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

5

你所得到的两个答案似乎假设你的应用程序运行在不同的模式下(即本地文件系统与通过Web检索文件,使用URLS)。请澄清你的问题,以便明确接受哪个答案。(对于其作者的假设,它们都是正确的。) - Jason D
5个回答

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

5
我假设你在使用 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"));

Path.GetFullPath("\server\webroot\folder\foo\bar\mew......\images\arrow.gif")完成了任务 - 很好,谢谢 :) - simonalexander2005

3

Path类提供了方法GetFullPath(string path)

例如:

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

返回值

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

1

在这里查看答案:

https://dev59.com/8XNA5IYBdhLWcg3wa9Gp#42939289

这种方法更好,因为它不需要对Uri进行路径重映射,而GetFullPath则涉及文件系统操作,因此答案可能比其他版本更快。(纯字符串操作)


1

看看明显的候选项:

  • Path
  • DirectoryInfo

我敢打赌它们有一些方法可以做到这一点。猜测:为您的路径创建一个新的DirectoryInfo对象,然后检查属性 - 可能在其中有规范路径...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接