在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
片。我仍然有根目录和文件名,但似乎任何进一步的子树信息都已经过了这个阶段。
答案 0 :(得分:13)
没有。 FileInfo
接口根本不公开路径,os
和ioutil
包中提供的所有方法都接受路径名作为字符串。
答案 1 :(得分:3)
不,仅使用FileInfo无法打开文件。 os.Open只接受一个字符串。您应始终拥有路径或父路径,因为这是获取FileInfo的唯一方法。
答案 2 :(得分:0)
作为附加信息,这是如何构造包含路径的文件名字符串:
filename := filepath.Join(path, info.Name())