In golang, if I have an os.FileInfo
, is there any way to open an *os.File
from that by itself without the original path?
Let's say I had something like this:
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
}
}
}
Is there a way to convert FileInfo
to * File
? The code I'm actually working with isn't based on filepath.Walk
; but I do get an []os.FileInfo
slice back. I still have the root directory, and the file name, but it seems like any further sub-tree information has gone by this stage.
No. The FileInfo
interface simply does not expose the path and all provided methods in the os
and ioutil
packages accept the pathname as a string.
No, a file cannot be opened with just the FileInfo. os.Open only takes a string. You should always have the path or the parent path because that is the only way to get a FileInfo.
As additional info, this is how to constructor the filename string including path:
filename := filepath.Join(path, info.Name())