我正在尝试读取目录内的所有日志文件,下面的代码能够读取文件名,但不能读取其内容。
控制台输出
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()
filepath.abs()
将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs
值将缺少文件路径的 ./logs/
将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs
值将缺少文件路径的 ./logs/
段。
要解决此问题,您可以执行以下操作:
abs, err := filepath.abs(filepath.join("logs", file.name()))
或者,您可以使用 filepath.walkdir
filepath.walkdir
,它提供了fn
,它提供了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中文网其他相关文章!