识别现有文件夹

Identifying an existing folder

我遇到了一个问题,它似乎告诉我文件夹不存在,而实际上它确实存在。

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

expand 函数简单地将 ~ 翻译成 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/<user>/ 但它最终会声明该文件夹不存在,即使它显然存在,而且我知道我可以访问它,所以它似乎不是权限问题。

如果我尝试将 /root/ 作为输入,我会正确地收到权限错误,对此我没有意见。但我希望我的 ~ 目录到 return "Valid Path"

我的错误几乎总是: no such file or directory

我在 Lubuntu 19.xx 上,这是一个相当新鲜的安装,我是 运行 这个来自 ~/Projects/src/Playground/AppName 的应用程序,我正在使用 bash 来自 vscode.

我也试过 LstatStat 都失败了,更不用说大量的例子和不同的方法了。我确定这是一些我不理解的潜在 linux 事情...

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