首頁 >後端開發 >Golang >golang讀取目錄內的日誌檔案內容

golang讀取目錄內的日誌檔案內容

PHPz
PHPz轉載
2024-02-05 23:51:07845瀏覽

golang讀取目錄內的日誌檔案內容

問題內容

我正在嘗試讀取目錄內的所有日誌文件,下面的程式碼能夠讀取文件名,但不能讀取其內容。

控制台輸出

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除