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)
是否存在可以进行这种简化的对象,或者我是否需要进行一些字符串解析 - 如果是这样,最好的方法是什么?
您可以使用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)
我假设您在这里使用 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)