In golang, se ho uno os.FileInfo
, c'è un modo per aprire uno *os.File
da solo senza il percorso originale?Apertura di un file da un file Info
Diciamo che ho avuto qualcosa di simile:
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
}
}
}
C'è un modo per convertire FileInfo
-* File
? Il codice con cui sto effettivamente lavorando non è basato su filepath.Walk
; ma ottengo una fetta []os.FileInfo
indietro. Ho ancora la directory root e il nome del file, ma sembra che tutte le ulteriori informazioni sull'albero secondario siano passate da questa fase.
Hai provato a memorizzare il percorso dalla funzione 'walker'? Questo ti darebbe il percorso completo includendo la sottodirectory e il nome del file. Forse usare una mappa [stringa] os.FileInfo per memorizzare il percorso come chiave, quindi usarlo per aprire il file. –
Sono consapevole che questo mi darebbe il percorso completo e starò bene. Come ho già detto nella domanda, in realtà non sto usando filepath.Walk, quindi non ho la stringa del percorso al momento. –
Il codice che effettivamente utilizzo ioutil.ReadDir è molto più brutto rispetto all'esempio qui. Mentre so che c'è una soluzione al problema di livello più alto che ho (cioè camminare su un albero di directory e memorizzare i percorsi), la mia domanda specifica è se ho bisogno di fare tutto ciò che refactoring, o se c'è un modo semplice per andare da os.FileInfo su un file os.? –