Saya cuba membaca semua fail log dalam direktori, kod di bawah boleh membaca nama fail tetapi bukan kandungannya.
Keluaran konsol
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()
Mengembalikan hanya fail nama asas fail.
filepath.abs()
filepath.abs()
将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs
值将缺少文件路径的 ./logs/
akan menambah laluan yang diberikan, dalam kes ini nama asas fail, ke direktori kerja semasa. Oleh itu, nilai abs
yang dikembalikan akan tiada segmen ./logs/
laluan fail.
Untuk membetulkan isu ini, anda boleh melakukan perkara berikut:
abs, err := filepath.abs(filepath.join("logs", file.name()))
Sebagai alternatif, anda boleh menggunakan filepath.walkdir
filepath.walkdir
,它提供了fn
, yang menyediakan laluan fail untuk parameter fn
.
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 })
Atas ialah kandungan terperinci golang membaca kandungan fail log dalam direktori. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!