Golang:跨平台路径.Dir

12

我想在Unix和Windows上使用path.Dir()函数获取特定于平台的目录。请看下面的代码:

package main

import (
    "fmt"
    "path"
)

func main() {
    fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c"))
    fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`))
}
这会输出什么?
path.Dir("a/b/c"):  a/b
path.Dir("c:\foo\bar.exe"):  .

我想在第二次调用 path.Dir() (Windows) 时获得类似的东西

c:\foo

在Windows上运行的程序中,是否有可能告诉 path.dir() 使用Windows路径分隔符?或者我应该始终将反斜杠\ 转换为正斜杠 (/)?这里的首选策略是什么?

1个回答

18

我明白了“问题”出在哪里。 golang-nuts上的这个讨论 给了我提示,即path.Dir()始终使用/,而filepath.Dir()则是用于平台相关操作的函数。

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    fmt.Println(`filepath.Dir("a/b/c"): `, filepath.Dir("a/b/c"))
    fmt.Println(`filepath.Dir("c:\foo\bar.exe"): `, filepath.Dir(`c:\foo\bar.exe`))
}

在Windows操作系统上:

filepath.Dir("a/b/c"):  a\b
filepath.Dir("c:\foo\bar.exe"):  c:\foo

6
值得注意的是,'path'包的概述说明它适用于斜杠分隔的路径,而'path/filepath'则是特定于操作系统的。此外,如果需要的话,可以使用filepath.ToSlash()和filepath.FromSlash()将路径转换为斜杠分隔和特定于操作系统的格式。 - Running Wild
@RunningWild 给了很好的建议,谢谢。作为非母语人士,我曾认为“斜杠分隔路径”可以指代(反斜杠和正斜杠)。现在我知道得更清楚了。 - topskip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接