美文网首页
golang 的filepath.Walk遇到长路径会报错The

golang 的filepath.Walk遇到长路径会报错The

作者: 陈玉涛 | 来源:发表于2020-03-27 16:28 被阅读0次

    Walk(root stirng, walkFn WalkFunc) error
    该方法主要用于递归遍历目录:
    每一个目录和文件都调用walkFunc方法
    若路径过长(>256字符串) 会报错ERROR_PATH_NOT_FOUND,此时walk将停止后面的遍历
    解决办法如下

        var size int64
        err := filepath.Walk(path, func(p string, info os.FileInfo, err error) error {
            //处理长路径
            if info == nil && err != nil && strings.Contains(err.Error(), syscall.Errno(syscall.ERROR_PATH_NOT_FOUND).Error()) {
                if p[0:2] == `\\` { //网络路径
                    p = strings.Replace(p, `\\`, `\\?\UNC\`, 1)
                    info, err = os.Stat(p)
                } else {//正常路径
                    info, err = os.Stat(`\\?\` + p)
                }
            }
            if info == nil {
                return err
            }
            if !info.IsDir() {
                size += info.Size()
            }
        }
    
    

    相关文章

      网友评论

          本文标题:golang 的filepath.Walk遇到长路径会报错The

          本文链接:https://www.haomeiwen.com/subject/qptruhtx.html