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

Golang liest den Inhalt der Protokolldatei im Verzeichnis

PHPz
Freigeben: 2024-02-05 23:51:07
nach vorne
889 Leute haben es durchsucht

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)
                }
        
            }
Nach dem Login kopieren


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()))
Nach dem Login kopieren

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
}) 
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage