将相对路径转换为绝对路径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
是否有一个对象,可以做这样的简化,或做我需要做一些字符串解析 - 如果是这样什么是最好的方法是什么?
我假设你在这里使用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"));
其实我只是使用普通的旧C#和手动扫描源代码... – simonalexander2005 2010-07-15 13:03:26
在这种情况下,查看我的更新。 :) – Noldorin 2010-07-15 13:03:53
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);
好方法:) – 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"
这两个答案似乎假设你的应用程序运行在不同的模式(即,本地文件系统与通过网络检索文件,使用URLS。)请澄清您的问题,以使您接受的任何答案清楚。 (他们都是他们的作者假设点。) – 2010-07-15 13:08:50