Ответ 1
Нет. Интерфейс FileInfo
просто не раскрывает путь, и все предоставленные методы в пакетах os
и ioutil
принимают путь как строку.
В 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
. У меня все еще есть корневая директория и имя файла, но похоже, что на этом этапе все последующие данные по древу.
Нет. Интерфейс FileInfo
просто не раскрывает путь, и все предоставленные методы в пакетах os
и ioutil
принимают путь как строку.
Нет, файл не может быть открыт только с помощью FileInfo. os.Open принимает только строку. Вы всегда должны иметь путь или родительский путь, потому что это единственный способ получить FileInfo.
В качестве дополнительной информации, это, как построить строку имени файла, включая путь:
filename := filepath.Join(path, info.Name())