登录
首页 >  Golang >  Go问答

检测已存在的文件夹

来源:stackoverflow

时间:2024-03-05 20:36:26 194浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《检测已存在的文件夹》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我有一个问题,似乎 go 告诉我文件夹不存在,而实际上它显然存在。

path, _ := reader.readstring('\n')
path, err := expand(path)
fmt.println("path expanded: ", path, err)

if err == nil {
    if _, err2 := os.lstat(path); err2 == nil {
        fmt.println("valid path")
    } else if os.isnotexist(err2) {
        fmt.println("invalid path")
        fmt.println(err2)
    } else {
        fmt.println(err2)
    }
}

展开函数只是将 ~ 转换为 homedir。

func expand(path string) (string, error) {
    if len(path) == 0 || path[0] != '~' {
        return path, nil
    }

    usr, err := user.Current()
    if err != nil {
        return "", err
    }
    return filepath.Join(usr.HomeDir, path[1:]), nil
}

如果我输入 ~ 的值,它会正确地将其转换为 /home// 但它最终表明该文件夹不存在,即使它显然存在,而且我知道我可以访问它,所以这似乎不是权限问题。

如果我尝试 /root/ 作为输入,我正确地收到权限错误,我对此表示同意。但我希望我的 ~ 目录返回 "valid path"

我的错误几乎总是:没有这样的文件或目录

我使用的是 lubuntu 19.xx,这是一个相当全新的安装,我从 ~/projects/src/演示/appname 运行此应用程序,并且我使用 vscode 的 bash 终端。

我还尝试了 lstatstat 均未成功,更不用说大量的示例和不同的方法了。我确信这是一些我不理解的底层 linux 东西......


解决方案


这个问题的答案是我没有修剪使用 \n 分隔符的 ReadString,通过添加 strings.Trim(path, "\n"),它纠正了我的问题。

到这里,我们也就讲完了《检测已存在的文件夹》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>