GOLANG: Fuss-Verzeichnis-Struktur und Prozess-Dateien — err = 'keine solche Datei oder Verzeichnis

Ich Schreibe eine routine, die zu Fuß ein Verzeichnis und erstellen Sie eine digitale Signatur (salted-hash) für jede Datei, die ich finde. Beim testen bekomme ich dieses komische Verhalten - wenn ich das Programm ein root-Pfad "oben" das Verzeichnis, das Programm kann zu Fuss den Baum und drucken Sie die Datei-Namen, aber wenn ich versuche, öffnen Sie die Datei, um es zu Lesen die bytes, bekomme ich die Fehlermeldung "no such file or directory" auf die Datei, die die Routinen gefunden, nicht sicher, was gibt es hier. Wie kann der Fuß () - routine "siehe" die Datei, aber ioutil.ReadFile() nicht in der Lage sein, es zu finden?

Beispielcode:

//start with path higher up the tree, say $HOME
func doHashWalk(dirPath string) {
    err := filepath.Walk(dirPath, walkFn)
    //Check err here
}

func walkFn(path string, fi os.FileInfo, err error) (e error) {

    if !fi.IsDir() {
        //if the first character is a ".", then skip it as it's a hidden file

        if strings.HasPrefix(fi.Name(), ".") {
            return nil
        }

        //read in the file bytes -> get the absolute path
        fullPath, err := filepath.Abs(fi.Name())
        if err != nil {
            log.Printf("Abs Err: %s", err)
        }

        //THIS ALWAYS FAILED WITH ERROR
        bytes, err := ioutil.ReadFile(fullPath) //<-- (fi.Name() also doesn't work)
        if err != nil {
            log.Printf("Err: %s, Bytes: %d", err, len(bytes))     
        }

        //create the salted hash
        ...
    }
    return nil
}
  • Die kurze Antwort ist, dass fi.Name() stellt nur den Namen der Datei, nicht den Pfad. Verwenden path für Ihre abs-Aufruf enthält sowohl die dirname und basename der Datei.
InformationsquelleAutor user2644113 | 2013-12-04
Schreibe einen Kommentar