问题内容
我正在尝试读取目录内的所有日志文件,下面的代码能够读取文件名,但不能读取其内容。
控制台输出
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读取目录内的日志文件内容的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!