2012-10-25 172 views
1

我正在编写一个程序,其中一个组件必须能够采取它给出的路径(例如/help/index.html/help/)和一个基于相对路径(例如../otherpage/index.htmlsub/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温伯格!对于所有人from the future,这里是我使用的代码。

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

回答

7

path.Dir使用应该做你想要什么时,path.Join。有关交互式示例,请参阅http://golang.org/pkg/path/#example_Join

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

这将返回/content.txt

+0

谢谢!它并没有完全达到我想要的效果,但是我可以使用其他路径实用程序将它封装在一个小函数中。对于任何人[来自未来](http://xkcd.com/979/),在这里。 FUNC加入(源,目标字符串){ 如果path.IsAbs(目标){ 回报目标 } 回报path.Join(path.Dir(源),目标) } –

+0

我现在看它是不是正是你想要的。我更新了我的答案。 –

+0

再次感谢您;由于绝对路径被奇怪地解释,我不得不添加if语句。我仍然不熟悉StackOverflow特定的降价品牌,所以我只是将代码块添加到顶端。 –