2015-05-04 19 views
10

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.

+1

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. –

+0

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. –

+2

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.? –

risposta

9

No. L'interfaccia FileInfo non espone semplicemente il percorso e tutti i metodi forniti nei pacchetti os e ioutil accettano il percorso come stringa.

3

No, un file non può essere aperto con il solo FileInfo. os.Open accetta solo una stringa. Dovresti sempre avere il percorso o il percorso genitore perché quello è l'unico modo per ottenere un FileInfo.

Problemi correlati