20

我正在编写一个程序,其中一个组件必须能够采用给定的路径(例如/help/index.html,或/help/)和基于该位置的相对路径(例如../otherpage/index.html,或sub/dir/of/help/,或help2.html)并生成绝对路径由相对路径暗示。考虑以下目录树。

/
index.html
content.txt
help/
    help1.html
    help2.html

该文件index.html包含一个链接,如help/help1.html. 该程序通过/or /index.html,并将其与help/help1.htmlget结合起来/help/help1.html

同样,该文件/help/help1.html具有链接../content.txt,程序需要从该链接返回/content.txt。有没有合理的方法来做到这一点?

谢谢你。:)

编辑:谢谢斯蒂芬温伯格!对于未来的每个人,这是我使用的代码。

func join(source, target string) string {
    if path.IsAbs(target) {
        return target
    }
    return path.Join(path.Dir(source), target)
}
4

2 回答 2

30

使用path.Joinpath.Dir应该做你想做的事。有关交互式示例,请参见http://golang.org/pkg/path/#example_Join 。

path.Join(path.Dir("/help/help1.html"), "../content.txt")

这将返回/content.txt

于 2012-10-25T22:32:56.210 回答
3

斯蒂芬的回答是正确的,但我想添加一些东西来节省未来的读者一些时间:

您应该注意path 包中的函数假定分隔符是/. 使用上面的示例时,我一直得到输出,.因为我有一个使用\.

如果您不处理 URL,请考虑使用使用操作系统目录分隔符的文件路径包。

例如在 Windows 上运行时:

path.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
filepath.Dir("C:\\Users\\Darren\\Desktop\\file.txt")

回报:

.
C:\Users\Darren\Desktop
于 2018-07-25T09:27:26.143 回答