【发布时间】:2026-02-24 16:15:01
【问题描述】:
似乎没有标准方法可以从相对 URI (this property is valid only for absolute URIs) 计算 LocalPath,以便与 Path.Combine 结合使用,例如将其与文件掩码 (*.分机)。问题是MakeRelativeUri 产生类似于my%20folder/ 的东西,而不是my folder\。
这是我找到的解决方法:
Module Module1
Sub Main()
Dim path1 As String = "C:\my folder\"
Dim path2 As String = "C:\"
MsgBox(GetPathDiff(path1, path2)) 'outputs "my folder\" (without quotes)
End Sub
Private Function GetPathDiff(path1 As String, path2 As String) As String
Dim uri1 As New Uri(path1)
Dim uri2 As New Uri(path2)
Dim uri3 As Uri = uri2.MakeRelativeUri(uri1)
Return Uri.UnescapeDataString(uri3.OriginalString).Replace("/", "\")
End Function
End Module
我觉得这是一种相当笨拙的方法,并且可能有一些我还没有偶然发现的隐藏石头,即这种方法对于不同的用例并不是 100% 稳定的。
有更好的方法吗?
【问题讨论】:
-
你为什么在这里使用 Uri?从您的代码看来,您正在尝试处理文件路径。这并不是 Uri 真正关注的焦点——它支持这一点的唯一原因是 file: URIs。它给你的值是正确的——如果你在调试器中查看 uri1 和 uri2,你会看到它们是 file:///C:/my%20folder/ 和 file:///C:/ 所以正确相对 URI 确实是我的 %20 文件夹。大概您正在寻找相对文件系统路径?这在 Uris 的世界中并不是一个真正的概念,所以它会很笨拙。
-
@IanGriffiths:我在网上找到了一个使用 URI 进行路径差异的实现,到目前为止,这似乎是一个相当干净的实现。我仍然认为它比其他解决方案更好,就代码行数而言。