【问题标题】:golang: cross platform path.Dirgolang:跨平台路径.Dir
【发布时间】:2012-08-26 17:04:43
【问题描述】:

我想在具有平台特定目录的 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

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

【问题讨论】:

    标签: windows path go


    【解决方案1】:

    我知道“问题”在哪里。 This discussion at 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`))
    }
    

    在窗户上:

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

    【讨论】:

    • 值得注意的是,'path' 的包概述指出它用于斜杠分隔的路径,而'path/filepath' 是特定于操作系统的。此外,如果您需要,filepath.ToSlash() 和 filepath.FromSlash() 可用于在斜杠分隔和操作系统特定之间进行转换。
    • @RunningWild 好建议,谢谢。作为非母语人士,我假设“斜杠分隔路径”可以同时表示(反斜杠和正斜杠)。现在我知道得更多了。
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2011-11-16
    • 2014-06-09
    • 2013-01-03
    相关资源
    最近更新 更多