Открытие файла из FileInfo

В golang, если у меня есть os.FileInfo, есть ли способ открыть из него *os.File без исходного пути?

Скажем, у меня было что-то вроде этого:

package main

import (
    "os"
    "path/filepath"
    "strings"
)

var files []os.FileInfo

func walker(path string, info os.FileInfo, err error) error {
    if strings.HasSuffix(info.Name(), ".txt") {
        files = append(files, info)
    }
    return nil
}

func main() {
    err := filepath.Walk("/tmp/foo", walker)
    if err != nil {
        println("Error", err)
    } else {
        for _, f := range files {
            println(f.Name())
            // This is where we'd like to open the file
        }
    }
}

Есть ли способ конвертировать FileInfo в * File? Код, с которым я фактически работаю, не основан на filepath.Walk; но я получаю фрагмент []os.FileInfo. У меня все еще есть корневая директория и имя файла, но похоже, что на этом этапе все последующие данные по древу.

Ответ 1

Нет. Интерфейс FileInfo просто не раскрывает путь, и все предоставленные методы в пакетах os и ioutil принимают путь как строку.

Ответ 2

Нет, файл не может быть открыт только с помощью FileInfo. os.Open принимает только строку. Вы всегда должны иметь путь или родительский путь, потому что это единственный способ получить FileInfo.

Ответ 3

В качестве дополнительной информации, это, как построить строку имени файла, включая путь:

filename := filepath.Join(path, info.Name())