首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查文件或目录是否存在?

如何检查文件或目录是否存在?
EN

Stack Overflow用户
提问于 2012-05-09 14:13:00
回答 4查看 103.4K关注 0票数 144

我想检查Go代码中是否存在文件./conf/app.ini,但我找不到一个好方法。

我知道在Java语言中有一个文件的方法:public boolean exists(),如果文件或目录存在,它将返回true。

但是在Go中如何做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-09 14:23:12

// exists returns whether the given file or directory exists
func exists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil { return true, nil }
    if os.IsNotExist(err) { return false, nil }
    return false, err
}

已编辑以添加错误处理。

票数 218
EN

Stack Overflow用户

发布于 2012-05-09 14:15:37

您可以使用以下命令:

if _, err := os.Stat("./conf/app.ini"); err != nil {
    if os.IsNotExist(err) {
        // file does not exist
    } else {
        // other error
    }
}

请参阅:http://golang.org/pkg/os/#IsNotExist

票数 132
EN

Stack Overflow用户

发布于 2020-10-31 06:14:22

我使用以下函数来检查我的目录中是否有任何错误。它与前面的答案非常相似,但我认为不嵌套ifs会使代码更清晰。它使用go-homedir从目录路径中删除~,使用pkg/errors返回更好的错误消息,但如果您不需要它们的功能,则很容易将它们删除。

// validateDirectory expands a directory and checks that it exists
// it returns the full path to the directory on success
// validateDirectory("~/foo") -> ("/home/bbkane/foo", nil)
func validateDirectory(dir string) (string, error) {
    dirPath, err := homedir.Expand(dir)
    if err != nil {
        return "", errors.WithStack(err)
    }
    info, err := os.Stat(dirPath)
    if os.IsNotExist(err) {
        return "", errors.Wrapf(err, "Directory does not exist: %v\n", dirPath)
    }
    if err != nil {
        return "", errors.Wrapf(err, "Directory error: %v\n", dirPath)

    }
    if !info.IsDir() {
        return "", errors.Errorf("Directory is a file, not a directory: %#v\n", dirPath)
    }
    return dirPath, nil
}

此外,重复@Dave C的评论,如果您检查目录是否存在的原因是将文件写入其中,那么通常更好的做法是在之后尝试打开它并处理错误:

// O_EXCL - used with O_CREATE, file must not exist
file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
if err != nil {
    return errors.WithStack(err)
}
defer file.Close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10510691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档