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

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

PHPz
發布: 2024-02-05 23:51:07
轉載
857 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板