我对filepath.Walk函数有一个非常令人费解的问题。它似乎只找到具有DOT文件的目录。如.AndroidStudio或.arduino。如果我将root设置为/ home / charles
之类的东西,它不会提交任何文件或目录//Watches ...Recursively walk the filesystem, entrypoint to file watching
func Watches(tops []string) {
dirSet := make(map[string]bool)
for _, top := range tops {
err := filepath.Walk(top, func(path string, f os.FileInfo, err error) error {
if err != nil {
log.Println(err)
return err
}
log.Println("File: ", path)
if f.IsDir() {
//Maps can only have one key that matches, duplicates will be overwritten
dirSet[path] = true
}
return nil
})
if err != nil {
log.Println(err)
}
}
}
答案 0 :(得分:2)
import "path/filepath"
文件按词汇顺序进行,
如果走到路径指定的文件或目录时出现问题, 传入的错误将描述问题,功能可以 决定如何处理该错误(并且Walk不会进入那个错误 目录)。如果返回错误,则处理停止。唯一的 异常是函数返回特殊值SkipDir时。如果 当在目录上调用时,该函数返回SkipDir,Walk跳过 目录的内容完全。如果函数返回SkipDir 当在非目录文件上调用时,Walk会跳过剩余的文件 在包含目录中。
在Walk
中,dot(Unicode Full Stop'。' U + 002E)目录文件以词汇顺序排在第一位。
在WalkFunc
中,您返回错误:"如果返回错误,则处理停止。"例如,
if err != nil {
log.Println(err)
return err
}
输出:
open /home/peter/.cache/dconf: permission denied
忽略错误return nil
。例如,
if err != nil {
log.Println(err)
return nil
}