代码之家  ›  专栏  ›  技术社区  ›  jaxxstorm

在go中的父目录中递归查找名为的文件

  •  1
  • jaxxstorm  · 技术社区  · 6 年前

    我有一个目录:

    basepath + /my/sub/directory
    

    在该子目录中,我有多个名为的文件实例 file.json

    例子:

    my/file.json
    my/sub/file.json
    my/sub/directory/file.json
    

    我要做的是使用完整的目录路径,然后返回文件树,直到单击 basepath 并查找 文件.json

    我看着 filepath.Walk 但这似乎是通过目录树向下,而不是向上

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mihailo    6 年前

    这里有一种方法,你可以向后走,阅读每一个 file.json 一路上。

    项目目录结构示例:

    ./
      - main.go
      ./my
        - file.json > {"location": "/my"}
        ./my/sub
          - file.json > {"location": "/my/sub"}
          ./my/sub/dir
            - file.json > {"location": "/my/sub/dir"}
    

    主.go

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "path/filepath"
    )
    
    func main() {
        basePath := "./"
        targetPath := basePath + "my/sub/dir"
        fileName := "file.json"
    
        for {
            rel, _ := filepath.Rel(basePath, targetPath)
    
            // Exit the loop once we reach the basePath.
            if rel == "." {
                break
            }
    
            // Simple file reading logic.
            dat, err := ioutil.ReadFile(fmt.Sprintf("%v/%v", targetPath, fileName))
            if err != nil {
                panic(err)
            }
            fmt.Println(string(dat))
    
            // Going up!
            targetPath += "/.."
        }
    
    }
    

    输出:

    { "location": "/my/sub/dir" }
    { "location": "/my/sub" }
    { "location": "/my" }
    

    希望你觉得这种方法有用。