【问题标题】:Go get parent directory去获取父目录
【发布时间】:2018-06-18 19:02:19
【问题描述】:

我有一些命令行程序,我需要从父文件夹中读取文件,我的意思是

-parentDir
 -- myproject
 --- cmd
 ----main.go 

 --otherdir
  -file.json 

如您所见,otherdir 就像myproject 的兄弟,我需要从我的main.go 阅读file.json

我尝试过的如下

func visit(path string, f os.FileInfo, err error) error {
  fmt.Printf("Visited: %s\n", path)
  return nil
} 


func main() {
  flag.Parse()
  root := flag.Arg(0)
  err := filepath.Walk(root, visit)
  fmt.Printf("filepath.Walk() returned %v\n", err)
}

我也尝试过提供 args(-1) 但这无济于事...... 知道如何从command line 程序中读取一些从我的可执行文件升级的文件吗?

我也试过

import "github.com/mitchellh/go-homedir"


func Path(path string) (error, string) {
    home, err := homedir.Dir()
   }

这给出了也无济于事的根目录...

【问题讨论】:

    标签: go path directory filepath


    【解决方案1】:

    二进制文件在哪里并不重要,重要的是工作目录是什么(执行程序时所在的目录)。所有相对路径都将相对于当前工作目录。所以,如果你从myproject 执行,你会使用../ 之类的东西作为Walk 的根路径。

    也就是说,我强烈建议您使路径可配置,而不是假设二进制文件将始终从源树中的某个特定位置执行。

    【讨论】:

    • 谢谢,但 ..otherdir 在您的解决方案中是不变的,它实际上可以是任何名称,我无法预测。我知道我应该在otherdirN 中找到file.json,它与myproj 处于同一级别
    • 没关系,只需使用 Walk 和根在例如../。但是...如果多个同级目录中有 json 文件怎么办?同样,这似乎应该使用配置参数来解决,以指定要使用的确切路径,而不是尝试根据当前工作目录遍历目录结构。像你描述的那样做会在未来导致更多的问题。
    • 您能否用正确的walk 解决方案更新您的答案?
    • 与您拥有的代码完全相同,但根不同,如已说明的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2016-05-18
    • 1970-01-01
    • 2012-01-29
    • 2017-04-09
    相关资源
    最近更新 更多