Heim > Artikel > Backend-Entwicklung > Golang liest den Inhalt der Protokolldatei im Verzeichnis
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) } }
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.walkdir
filepath.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!