In Golang, wenn ich eine os.FileInfo
habe, gibt es eine Möglichkeit, eine *os.File
von selbst ohne den ursprünglichen Pfad zu öffnen?Öffnen einer Datei aus einer FileInfo
Lassen Sie uns sagen, dass ich so etwas wie dieses hatte:
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
}
}
}
Gibt es eine Möglichkeit FileInfo
-* File
zu konvertieren? Der Code, mit dem ich gerade arbeite, basiert nicht auf filepath.Walk
; aber ich bekomme eine []os.FileInfo
Scheibe zurück. Ich habe immer noch das root-Verzeichnis und den Dateinamen, aber es scheint, als ob alle weiteren Unterbauminformationen um diese Stufe gegangen sind.
Haben Sie versucht, den Pfad von Ihrem "Walker" -Func zu speichern? Damit erhalten Sie den vollständigen Pfad einschließlich Unterverzeichnis und Dateiname. Vielleicht verwenden Sie eine Map [string] os.FileInfo, um den Pfad als Schlüssel zu speichern und dann zum Öffnen der Datei zu verwenden. –
Ich bin mir bewusst, dass das mir den vollen Weg geben würde, und mir würde es gut gehen. Wie ich schon in der Frage gesagt habe, benutze ich nicht den Dateipfad.Walk, daher habe ich die Pfadzeichenfolge zu der Zeit nicht. –
Der Code, den ich tatsächlich habe verwendet ioutil.ReadDir und ist viel hässlicher als das Beispiel hier. Während ich weiß, dass es eine Lösung für das Problem auf höherer Ebene gibt, das ich habe (dh einen Verzeichnisbaum gehen und die Pfade speichern), ist meine spezielle Frage, ob ich all dieses Refactoring machen muss oder ob es einen einfachen Weg gibt, von dem aus zu gehen os.FileInfo an eine os.File? –