【发布时间】:2011-09-08 18:04:40
【问题描述】:
由于 .NET 不包含创建相对路径的 API,因此我使用了 Uri 的 MakeRelativeUri 方法。这行得通,但我遇到了几种情况,由于 Uri 被转义,它没有。所以我也修复了它:
public static string MakeRelativePath(string basePath, string tgtPath) {
return
Uri.UnescapeDataString(
new Uri(basePath, UriKind.Absolute)
.MakeRelativeUri(new Uri(tgtPath, UriKind.Absolute))
.ToString()
).Replace('/', Path.DirectorySeparatorChar);
}
这个版本似乎可以工作,但它让我感到有些疑惑:难道没有任何有效的本地文件系统路径可能会破坏这种无偿的转义吗?
相关: How to get relative path from absolute path 该问题的答案根本没有解决异常字符和转义的问题,因此不回答这个问题。
【问题讨论】:
-
@Eamon 这里有一些很好的答案:stackoverflow.com/questions/275689/… 如果是我,我会选择 P/Invokes to
PathRelativePathTo()的解决方案 -
是的,我看到一个也在使用 Uri 的答案,但没有转义,即 borked。 P/调用;嗯,这很慢并且依赖于平台,这意味着您可能会遇到 x86/x64 问题、非完全信任问题,当然,silverlight/XNA 之类的东西不一定支持它。它会起作用,但这不是我的第一选择。
-
@Eamon 我可以看到。我我以 Windows 为中心,所以 P/Invoking 很好。我认为速度不是问题——你不会在应用程序的热循环中调用它吧?!!
-
PathRelativePathTo据我所知没有触及文件系统。它纯粹基于文本。如果你想知道它是如何实现的,你可以随时查看 Wine 源代码!
标签: c# .net path uri relative-path