在Go的父目录中以递归方式查找具有名称的文件

时间:2018-06-26 20:22:47

标签: go recursion

我有一个目录:

asv
--as-f-b-asfb---
--

在该子目录中,我有一个文件名为basepath + /my/sub/directory

的多个实例。

示例:

file.json

我要做的是使用完整目录路径,并向后走回文件树,直到我点击my/file.json my/sub/file.json my/sub/directory/file.json 并找到basepath的所有文件路径

我看着file.json,但它似乎在目录树中向下而不是向上

1 个答案:

答案 0 :(得分:1)

这是一种可以向后走,并沿途阅读每个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"}

  

main.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" }

希望您发现此方法有用。