You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang读取目录下日志文件内容失败问题求助

问题原因&修复方案

问题根源

报错核心是路径错误:file.Name()仅返回文件名,但日志文件实际存放在./logs/子目录下,直接用filepath.Abs(file.Name())生成的路径是当前工作目录+文件名,自然找不到logs子目录里的目标文件。

另外还有个变量覆盖问题:循环内file, err := os.Open(abs)重新声明了file变量,覆盖了外层ioutil.ReadDir返回的文件对象,虽不影响功能,但易造成代码混淆。

修复后的代码

files, err := ioutil.ReadDir("./logs/")
if err != nil {
    log.Fatal(err)
}
fmt.Println(totalTicks)
for _, f := range files { // 修改循环变量名避免覆盖
    fmt.Println(f.Name(), f.IsDir())
    // 拼接日志目录与文件名,生成正确的文件路径
    filePath := filepath.Join("./logs/", f.Name())
    file, err := os.Open(filePath)
    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)
    }
}

关键修改说明

  • 用filepath.Join("./logs/", f.Name())拼接路径,确保指向logs子目录下的目标文件
  • 将循环变量名从file改为f,避免与打开文件后返回的file变量冲突

内容的提问来源于stack exchange,提问作者boycod3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:55:07