我有两个Uri对象传递到一些代码中,一个是目录,另一个是文件名(或相对路径)。
var a = new Uri("file:///C:/Some/Dirs");
var b = new Uri("some.file");当我试着像这样组合它们时:
var c = new Uri(a,b);我得到了
file:///C:/Some/some.file
在这里,我希望获得与Path.Combine相同的效果(因为这是我需要替换的旧代码):
file:///C:/Some/Dirs/some.file
我想不出一个干净的解决办法。
丑陋的解决方案是在Uri不存在的情况下向Uri添加一个/
string s = a.OriginalString;
if(s[s.Length-1] != '/')
a = new Uri(s + "/");发布于 2012-04-28 16:41:05
这应该对你有好处:
var baseUri = new Uri("http://www.briankeating.net");
var absoluteUri = new Uri(baseUri, "/api/GetDefinitions");这个构造函数遵循标准的相对URI规则,因此/很重要:
http://example.net + foo = http://example.net/foohttp://example.net/foo/bar + baz = http://example.net/foo/bazhttp://example.net/foo/ + bar = http://example.net/foo/barhttp://example.net/foo + bar = http://example.net/barhttp://example.net/foo/bar/ + /baz = http://example.net/baz发布于 2010-05-14 10:27:34
您可以尝试这个扩展方法!总是工作!-)
public static class StringExtension
{
public static string UriCombine(this string str, string param)
{
if (!str.EndsWith("/"))
{
str = str + "/";
}
var uri = new Uri(str);
return new Uri(uri, param).AbsoluteUri;
}
}安杰洛·阿莱桑德罗
发布于 2009-05-19 22:42:13
添加第一个uri的斜杠结束,URI将忽略多个斜杠(/)
var a = new Uri("file:///C:/Some/Dirs/");编辑:
var a = new Uri("file:///C:/Some/Dirs");
var b = new Uri("some.file", UriKind.Relative);
var c = new Uri(Path.Combine(a.ToString(), b.ToString()));
MessageBox.Show(c.AbsoluteUri);https://stackoverflow.com/questions/885373
复制相似问题