【问题标题】:Easiest way to split file system path into segments/sections将文件系统路径拆分为段/部分的最简单方法
【发布时间】:2022-09-24 00:35:52
【问题描述】:

我想从 golang 中的文件系统路径创建一个段列表。

  • 在 Windows 上:\"a\\b\\c\" 应该被解析为 [\"a\", \"b\", \"c\"]
  • 在 POSIX 系统上:\"a/b/c\" 应该被解析为 [\"a\", \"b\", \"c\"]

查看path/filepath package 我只能看到Split 函数,它只将路径分成两个字符串,最后一段和其他所有内容。

是否有任何标准库函数可以将路径拆分为开箱即用的所有段?

我可以想到这个解决方法:

strings.Split(filepath.ToSlash(path), \"/\")

我也在考虑递归地使用filepath.Split,但它最终会进入无限循环,因为 dir 字符串包含结束分隔符。请参阅此示例以了解为什么您不能多次运行 Split https://go.dev/play/p/xZ-2DML0xWK

func mySplit(path string) []string {
    dir, last := filepath.Split(path)
    if dir == \"\" {
        return []string{last}
    }
    return append(mySplit(dir), last)
}
  • 迭代文件路径.Split。
  • 谢谢@Volker,如果您的意思是在目录上再次运行filepath.Split,那将行不通。因为多次调用 Split 不断返回同一个目录。我在问题描述中添加了指向 Go Playground 示例的链接。我也复制到这里:go.dev/play/p/xZ-2DML0xWK

标签: go path


【解决方案1】:

拆分前清洁。

func mySplit(path string) []string {
    dir, last := filepath.Split(path)
    if dir == "" {
        return []string{last}
    }
    return append(mySplit(filepath.Clean(dir)), last)
}

【讨论】:

    【解决方案2】:
    r := strings.Split("a/b/c", "/")
    
    
    r := strings.Split("a\b\c", "\")
    

    【讨论】:

    • 这在 Windows 上不起作用。
    猜你喜欢
    • 2010-09-29
    • 2014-05-24
    • 2012-04-30
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多