GoLang Печать дерева каталогов - PullRequest
0 голосов
/ 08 мая 2020

У меня проблемы с созданием рекурсивной функции в Go для печати каталога со всеми его подкаталогами и файлами. У меня возникли проблемы с сохранением текущих файлов или каталога в результате. Следующий код печатает только каталоги уровня 0.

func ListTree(path string, level int) (result string, err error) {
    files, err := ioutil.ReadDir(path)
    if err != nil {
        return result, err
    }
    for idx, entry := range files {
        result += fmt.Sprintf("\n%v/%v", MultiplyElement("\t", level), entry.Name())
        if entry.IsDir() {
            ListTree(path + "/" + entry.Name(),level+1)
        }
    }
    return result, err
}

Однако, когда я объявляю переменную результата вне функции (я знаю, что это плохой код, только для тестирования), она работает отлично, но значение результата не не очищается после вызова функции.

var result string
func ListTree(path string, level int) (string, error) {
    files, err := ioutil.ReadDir(path)
    if err != nil {
        return result, err
    }
    for idx, entry := range files {
        result += fmt.Sprintf("\n%v/%v", MultiplyElement("\t", level), entry.Name())
        if entry.IsDir() {
            ListTree(path + "/" + entry.Name(),level+1)
        }
    }
    return result, err
}

Как я могу исправить эту проблему?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

В первом примере кода вы вызываете ListTree рекурсивно, но не используете его возвращаемое значение, поэтому все, что вычислено и возвращено вызовами на уровне> 0, падает на пол.

Вместо этого попробуйте :

result += ListTree(path + "/" + entry.Name(),level+1)

В качестве альтернативы используйте путь к файлу. Переход для обхода дерева каталогов.

0 голосов
/ 08 мая 2020

Вы можете использовать filepath.Walk.

filepath.Walk("/path/to/folder", func(name string, info os.FileInfo, err error) error {
    fmt.Println(name)
    return nil
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...