我想在包含各種子目錄的目錄中搜索特定型別的檔案。我filepath.walk()在 Golang 中為此使用。但是,我不想遞回迭代超出我知道該檔案不存在的最大深度。
Golang 中有沒有這樣的預建函式/庫?
uj5u.com熱心網友回復:
首先,你應該使用filepath.WalkDirGo 1.16 中引入的,它比filepath.Walk.
Walk 的效率低于 Go 1.16 中引入的 WalkDir,后者避免在每個訪問的檔案或目錄上呼叫 os.Lstat。
然后,無法將最大深度指定為直接引數。您必須計算WalkDirFunc.
顯然,在檔案路徑中計算分隔符是一種可接受的策略(并且可以說比其他可能的技巧更簡單),因此解決方案可能如下所示:
maxDepth := 2
rootDir := "root"
err := filepath.WalkDir(rootDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
// handle possible path err, just in case...
return err
}
if d.IsDir() && strings.Count(path, string(os.PathSeparator)) > maxDepth {
fmt.Println("skip", path)
return fs.SkipDir
}
// ... process entry
return nil
})
所以dir結構如下:
.
└── root
├── a.txt
├── b.txt
└── root1
├── a.txt
└── root2
├── a.txt
├── b.txt
├── root3
│ └── a.txt
└── root4
并假設root在 depth 0,上面的代碼列印上面的代碼:
skip root/root1/root2/root3
skip root/root1/root2/root4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/429845.html
