【发布时间】:2019-06-06 12:13:32
【问题描述】:
我有一个问题,它似乎告诉我一个文件夹不存在,而它显然存在。
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>/,但它最终表明该文件夹不存在,尽管它显然存在,而且我知道我可以访问它,所以它不存在t 似乎是权限问题。
如果我尝试将/root/ 作为输入,我会正确收到权限错误,我可以接受。但我希望我的~ 目录返回"Valid Path"
我的错误几乎总是: no such file or directory
我在 Lubuntu 19.xx 上,这是一个相当新的安装,我正在从 ~/Projects/src/Playground/AppName 运行这个应用程序,我正在使用来自 vscode 的 bash 终端。
我也尝试了Lstat 和Stat 都没有成功,更不用说大量的例子和不同的方法了。我确信这是一些我不明白的底层 linux 东西......
【问题讨论】:
-
Expand tilde to home directory 的可能重复项。
-
我的 go CLI 程序中可能不需要它,但我正在拔头发,所以我想将其作为问题之一消除。我希望家庭帐户确保我有权限。我可以告诉你,如果我输入完整路径,忽略 tilda,它仍然不起作用。例如“/home/username/”也找不到。
-
请包含您程序的完整输出,以便我们了解扩展是如何进行的。
-
"ReadString 读取直到输入中第一次出现 delim,返回一个包含 直到并包括分隔符的数据的字符串。"你永远不会修剪换行符。
-
彼得,其实我只是注意到换行符,我想这可能是我的问题!