组合绝对路径和相对路径以获得新的绝对路径

时间:2012-10-25 22:30:02

标签: path go

我正在编写一个程序,其中一个组件必须能够获取它给出的路径(例如/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之类的链接。该计划已通过//index.html,并将其与help/help1.html合并,以获得/help/help1.html

同样,文件/help/help1.html具有链接../content.txt,程序需要从中返回/content.txt。有合理的方法吗?

谢谢。 :)

编辑:感谢Stephen Weinberg!对于每个人from the future,这是我使用的代码。

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

2 个答案:

答案 0 :(得分:22)

path.Joinpath.Dir一起使用时,应该按照自己的意愿行事。有关交互式示例,请参阅http://golang.org/pkg/path/#example_Join

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

这将返回/content.txt

答案 1 :(得分:0)

Stephen's answer是正确的,但我想添加一些内容以节省将来的读者:

您应该注意path package中的函数,并假设分隔符为/。使用上面的示例时,由于使用.拥有Window的文件路径,因此我一直获得输出\

如果您不操纵URL,请考虑使用使用操作系统目录分隔符的filepath package

例如在Windows上运行时:

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

返回:

.
C:\Users\Darren\Desktop