filepath.Walk只存档文件DOT文件

时间:2017-09-03 03:41:33

标签: go

我对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)
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

Package filepath

import "path/filepath"
     

func Walk

     

文件按词汇顺序进行,

     

type WalkFunc

     

如果走到路径指定的文件或目录时出现问题,   传入的错误将描述问题,功能可以   决定如何处理该错误(并且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
}