Найти файл с именем рекурсивно в родительских каталогах в Go - PullRequest
0 голосов
/ 26 июня 2018

У меня есть каталог:

basepath + /my/sub/directory

В этом подкаталоге у меня есть несколько экземпляров файла с именем file.json

Пример:

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

То, что я хочу сделать, это использовать полный путь к каталогу и идти НАЗАД вверх по дереву файлов, пока я не нажму basepath и не найду все пути к файлам для file.json

Я посмотрел на filepath.Walk, но похоже, что оно идет вниз по дереву каталогов, а не вверх

1 Ответ

0 голосов
/ 27 июня 2018

Вот один способ, которым вы можете идти назад и читать каждый 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" }

Надеюсь, вы найдете этот подход полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...