2015-09-25 40 views
3

使用MakeRelativeUri时出现错误路径。现在,这可能是Unity和mono的问题,或者希望我只是错误地使用它,或者在.net中实际存在一个错误。你将不得不原谅这个精心制作的例子,但这就是我所拥有的。Uri.MakeRelativeUri不正确处理../

System.Uri fileURI = new System.Uri("/Home/Folder1/Folder2/Folder3/Folder4/Folder5/Folder6/../../../../Folder7/Folder8/file.png"); 
System.Uri rootURI = new System.Uri("/Home/Folder1/Folder2/Folder3/../FolderA/."); 
result = rootURI.MakeRelativeUri(fileURI).ToString(); 

结果在这种情况下是../../Folder4/Folder5/Folder6/../../../../Folder7/Folder8/file.png

,但它应该是 ../Folder3/Folder4/Folder5/Folder6/../../../../Folder7/Folder8/file.png

它好像它是治疗的根路径的../作为一个目录,而不是一个指令回去一个目录。任何人都可以证实,如果是这种情况?

+0

你可以更新样本,使其编译? (RootPath需要是绝对的......) –

+0

用c#代码替换了伪代码 –

+0

我应该更加注意标签 - 原始代码可能没有问题。您发布的代码在常规.Net上无效(http://stackoverflow.com/questions/32826283/not-getting-invalid-uri-exception-on-ideone),但在单声道上似乎很好。检查是否有类似老问题的帮助:http://stackoverflow.com/questions/3692818/uri-makerelativeuri-behavior-on-mono –

回答

1

我已经通过将路径字符串通过Path.GetFullPath()传递给Uri构造函数之前解决此问题。这将正确地去除../,然后按照您的预期工作。