1 回答
TA贡献1744条经验 获得超4个赞
filepath.Walk 可能存在的性能问题有明确记录:
文件按词法顺序遍历,这使得输出具有确定性,但意味着对于非常大的目录,遍历可能效率低下。
使用os.File.Readdir按文件系统顺序迭代文件:
Readdir 读取与文件关联的目录的内容,并返回最多包含 n 个 FileInfo 值的片段,如 Lstat 按目录顺序返回的那样。对同一文件的后续调用将产生更多的 FileInfo。
package main
import (
"fmt"
"io"
"log"
"os"
"time"
)
func main() {
dir, err := os.Open("/tmp")
if err != nil {
log.Fatal(err)
}
for {
files, err := dir.Readdir(10)
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
for _, fi := range files {
classifier := ""
if fi.IsDir() {
classifier = "/"
}
fmt.Printf("%v %12d %s%s\n",
fi.ModTime().UTC().Truncate(time.Second),
fi.Size(),
fi.Name(), classifier,
)
}
}
}
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报