我正在嘗試讀取目錄內的所有日誌文件,下面的程式碼能夠讀取文件名,但不能讀取其內容。
控制台輸出
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()
# 僅傳回該檔案的基本名稱檔案。
filepath.abs()
將加入給定路徑,在本例中為檔案的基本名稱,到目前工作目錄。因此,傳回的 abs
值將缺少檔案路徑的 ./logs/
段。
要解決此問題,您可以執行以下操作:
abs, err := filepath.abs(filepath.join("logs", file.name()))
或者,您可以使用 filepath.walkdir
,它提供了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 })
以上是golang讀取目錄內的日誌檔案內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!