Heim >Backend-Entwicklung >Golang >Golang liest den Inhalt der Protokolldatei im Verzeichnis

Golang liest den Inhalt der Protokolldatei im Verzeichnis

PHPz
PHPznach vorne
2024-02-05 23:51:07844Durchsuche

Golang liest den Inhalt der Protokolldatei im Verzeichnis

Frageinhalt

Ich versuche, alle Protokolldateien in einem Verzeichnis zu lesen. Der folgende Code kann die Dateinamen, aber nicht deren Inhalte lesen.

Konsolenausgabe

ds-api-doc-.log false
2023/03/21 11:27:11 open /Users/xxx/ds-api-doc.log: no such file or directory 







 files, err := ioutil.ReadDir("./logs/")
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println(totalTicks)
            for _, file := range files {
                fmt.Println(file.Name(), file.IsDir())
                abs, err := filepath.Abs(file.Name())
        
                file, err := os.Open(abs)
                if err != nil {
                    log.Fatal(err)
                }
                defer file.Close()
        
                scanner := bufio.NewScanner(file)
                for scanner.Scan() {
                    fmt.Println(scanner.Text())
                }
        
                if err := scanner.Err(); err != nil {
                    log.Fatal(err)
                }
        
            }

Richtige Antwort


file.name() Gibt nur den Basisnamen der Datei zurück.

filepath.abs​​()filepath.abs​​() 将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs 值将缺少文件路径的 ./logs/ fügt den angegebenen Pfad, in diesem Fall den Basisnamen der Datei, zum aktuellen Arbeitsverzeichnis hinzu. Daher fehlt dem zurückgegebenen abs-Wert das Segment ./logs/ des Dateipfads.

Um dieses Problem zu beheben, können Sie Folgendes tun:

abs, err := filepath.abs(filepath.join("logs", file.name()))

Alternativ können Sie filepath.walkdirfilepath.walkdir,它提供了fn verwenden, das den Dateipfad für den Parameter fn bereitstellt.

err := filepath.WalkDir("./logs/", func(path string, de fs.DirEntry, err error) error) {
    if err != nil {
        return err
    } else if de.IsDir() {
        return nil
    }

    file, err := os.Open(path)
    // ...
    return nil
}) 

Das obige ist der detaillierte Inhalt vonGolang liest den Inhalt der Protokolldatei im Verzeichnis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen