Go 从FileInfo打开文件
在golang,如果我有一个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
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?我很有信心答案是否定的,但我正在四处查看以确认这一点。此外,可能有多条路径,用户只能访问其中的一些路径: