使用Uri.MakeRelativePath并获取正确的相对路径

时间:2018-04-04 16:24:15

标签: c# path

如果执行以下代码行:

new System.Uri("C:\\Windows\\System32").MakeRelativeUri(new System.Uri("C:\\Windows\\System32\\Notepad.exe")).ToString()

new System.Uri("C:\\Windows").MakeRelativeUri(new System.Uri("C:\\Windows\\System32\\Notepad.exe")).ToString()

你得到:

"System32/Notepad.exe"

"Windows/System32/Notepad.exe"

分别不应该是"Notepad.exe""System32/Notepad.exe"吗?似乎基本路径的最后部分包含在最终的相对路径中,这是不正确的,不是吗?

如果我使用网络网址做类似的事情:

new System.Uri("http://example.com").MakeRelativeUri(new System.Uri("http://example.com/this/is/strange")).ToString()
new System.Uri("http://example.com/this").MakeRelativeUri(new System.Uri("http://example.com/this/is/strange")).ToString()
new System.Uri("http://example.com/this/is").MakeRelativeUri(new System.Uri("http://example.com/this/is/strange")).ToString()

我得到的结果如下:

"this/is/strange"
"this/is/strange"
"is/strange"

我如何获得一个相对路径,以后我可以将其与原始基本路径组合以获得原始绝对路径?我是否需要使用System.Uri.MakeRelativeUri以外的其他内容?

1 个答案:

答案 0 :(得分:1)

我认为这是因为article.content无法推断MakeRelativeUri是文件夹还是没有扩展名的文件。这将有效:

System32

网址也是如此。 new System.Uri("C:\\Windows\\System32\\").MakeRelativeUri(new System.Uri("C:\\Windows\\System32\\Notepad.exe")).ToString(); 是文件夹还是资源? 这会有效:

this