我有一个System.Uri,例如,
var uri = new Uri("http://www.domain.com/foo/bar");
我如何才能获得相对的Uri:
/foo/bar
答案 0 :(得分:26)
您要找的是Uri.AbsolutePath或Uri.PathAndQuery。 PathAndQuery将包含查询字符串(您在问题中没有),而AbsolutePath将只提供路径。
Console.WriteLine(uri.PathAndQuery);
// or
Console.WriteLine(uri.AbsolutePath);
...输出以下结果......
/富/酒吧
答案 1 :(得分:0)
反之,即从相对路径获取绝对URI:-
1。获取所需的目录。 要向下移动,只需继续在目录中添加\对于 @“ c:\ someDirectory \ something \ something \ foo \ bar”
如果Directory.GetCurrentDirectory给出 @“ c:\ someDirectory” ,则执行以下操作:-
Uri uri = new Uri(Directory.GetCurrentDirectory() +
@"\something\something\" + relative_path);
或
Uri uri = new Uri(Directory.GetCurrentDirectory() +
"\\something\\something\\" + relative_path);
如果没有@符号,则必须用另一个\字符转义\字符,以便将其读取为字符串。
要向上走一步,请获取当前目录并使用 Directory.GetParent方法获取DirectoryInfo并继续使用 父级财产,以继续前进,例如对于 someDirectory \ foo \ bar
如果Directory.GetCurrentDirectory给出 @“ c:\ someDirectory \ somthing \ something” ,然后执行以下操作:-
DirectoryInfo directory =
Directory.GetParent(Directory.GetCurrentDirectory()).Parent;
GetParent使您升级并返回DirectoryInfo对象 现在,您可以继续使用Parent属性来继续前进 仍然每次都获得DirectoryInfo。所以我上移了文件结构 两次。
Uri uri = new Uri(directory.FullName + relative_path);
directory.FullName的类型为字符串,这是您的绝对路径 想要,将其连接到您的相对路径并生成一个新的Uri。 所以这是一种可以倒退的工作。