【问题标题】:path.IsAbs returning incorrect result for Windows pathspath.IsAbs 为 Windows 路径返回不正确的结果
【发布时间】:2020-03-02 06:04:56
【问题描述】:

path.IsAbs 的文档说 IsAbs 报告路径是否为绝对路径。我的代码中有一个函数可以检查第一个参数是否是绝对的,如果不是,它会创建一个绝对路径。

func getPath() string {
    var dir string
    fmt.Printf("first arg -> %s and is it abs? %t\n", os.Args[1], path.IsAbs(os.Args[1]))
    if path.IsAbs(os.Args[1]) {
        dir = os.Args[1]
    } else {
        var currentDir string
        currentDir = filepath.Dir(os.Args[0])
        dir, _ = filepath.Abs(path.Join(currentDir, os.Args[1]))
    }
    return dir
}

输出为first arg -> C:\Users\Mohammad\Music\Uncategorized\Telegram and is it abs? false

但第一个论点是绝对的,所以我错过了什么?

【问题讨论】:

  • Go 的文档与人们似乎习惯的不同。对于 Go 包,您实际上也应该阅读包文档(或类型文档),而不仅仅是方法或函数文档。如有疑问:阅读文档并从头开始阅读所有内容(至少是软件包文档)。

标签: go path absolute-path


【解决方案1】:

看看这个函数的source code,很明显它只是检查路径的第一个字符是否是/。这意味着它采用 UNIX 样式的路径,而不是带有驱动器号的 Windows 样式。但是这种行为是设计使然,并且也有据可查。就在the documentation 的开头,它明确表示:

path 包只能用于正斜杠分隔的路径,例如 URL 中的路径。 此包不处理带有驱动器号的 Windows 路径 或反斜杠;要操作操作系统路径,请使用 path/filepath 包。

因此,请遵循文档并为您的特定用例使用正确的包。

【讨论】:

    【解决方案2】:

    windows 操作系统可以使用

    C:\\Users\\Mohammad\\Music\\Uncategorized\\Telegram 
    

    C:/Users/Mohammad/Music/Uncategorized/Telegram 
    

    它们应该在您的情况下完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2016-02-06
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多