2015-09-25 52 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構造函數之前解決此問題。這將正確地去除../,然後按照您的預期工作。