在golang中,如果我有os.FileInfo
,有沒有什麼辦法可以在沒有原始路徑的情況下自行打開*os.File
?從FileInfo打開文件
比方說,我有這樣的事情:
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
切片。我仍然有根目錄和文件名,但似乎在這個階段已經有了更多的子樹信息。
你有沒有試過存儲'walker' func的路徑?這會給你完整的路徑,包括子目錄和文件名。也許可以使用map [string] os.FileInfo來將路徑存儲爲密鑰,然後使用它來打開文件。 –
我知道那會給我完整的路徑,我會很好。正如我在問題中所說的,我實際上並沒有使用filepath.Walk,所以當時沒有路徑字符串。 –
我實際上使用的代碼使用了ioutil.ReadDir,比這裏的例子更難看。雖然我知道我有更高級別的問題的解決方案(即,走一個目錄樹,並存儲路徑),但我的具體問題是,如果我需要做所有重構,或者如果有一個簡單的方法os.FileInfo到os.File? –