Go 从FileInfo打开文件

Go 从FileInfo打开文件,go,Go,在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

在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
        }
    }
}

有没有办法将
文件信息
转换为
*文件
?我实际使用的代码不是基于
filepath.Walk
;但我确实得到了一个
[]os.FileInfo
切片。我仍然有根目录和文件名,但似乎任何进一步的子树信息都已经过了这个阶段

否,仅使用FileInfo无法打开文件。Open只接受一个字符串。您应该始终拥有路径或父路径,因为这是获取文件信息的唯一方法。

否。
FileInfo
接口根本不公开路径,并且
os
ioutil
包中提供的所有方法都将路径名作为字符串接受。

作为附加信息,这是如何构造文件名字符串,包括路径:

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

您是否尝试过存储
walker
func中的路径?这将为您提供完整的路径,包括子目录和文件名。也许可以使用map[string]os.FileInfo将路径存储为密钥,然后使用它打开文件。我知道这会给出完整的路径,我会很好。正如我在问题中所说,我实际上没有使用filepath.Walk,所以当时没有路径字符串。我实际使用的代码使用ioutil.ReadDir,比这里的示例要难看得多。虽然我知道我遇到的更高级别的问题有一个解决方案(即遍历目录树并存储路径),但我的具体问题是我是否需要进行所有重构,或者,如果有一种简单的方法可以从os.FileInfo转换为os.File?我很有信心答案是否定的,但我正在四处查看以确认这一点。此外,可能有多条路径,用户只能访问其中的一些路径: