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 關注
- 128 瀏覽
添加回答
舉報