【问题标题】:Identifying an existing folder [duplicate]识别现有文件夹[重复]
【发布时间】: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 终端。

我也尝试了LstatStat 都没有成功,更不用说大量的例子和不同的方法了。我确信这是一些我不明白的底层 linux 东西......

【问题讨论】:

  • Expand tilde to home directory 的可能重复项。
  • 我的 go CLI 程序中可能不需要它,但我正在拔头发,所以我想将其作为问题之一消除。我希望家庭帐户确保我有权限。我可以告诉你,如果我输入完整路径,忽略 tilda,它仍然不起作用。例如“/home/username/”也找不到。
  • 请包含您程序的完整输出,以便我们了解扩展是如何进行的。
  • "ReadString 读取直到输入中第一次出现 delim,返回一个包含 直到并包括分隔符的数据的字符串。"你永远不会修剪换行符。
  • 彼得,其实我只是注意到换行符,我想这可能是我的问题!

标签: linux go fileinfo


【解决方案1】:

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

【讨论】:

  • 另外,为什么投反对票?我真的很好奇,因为我觉得这是一个很好的问题,而“重复”只是一个重复,因为我没有意识到 ReadString 包含换行符。我只是问,以便我可以提出更好的问题,而不是抱怨,但如果我做的不好,我该如何纠正它?
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2012-12-05
  • 2011-07-29
  • 2014-03-19
  • 1970-01-01
  • 2017-02-14
  • 2021-12-10
相关资源
最近更新 更多