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
相关产品推荐
相关产品推荐

