如何检查文件是否在围棋的存在?如何检查文件是否在围棋的存在?(How to check if a f

2019-05-12 15:33发布

Go的标准库不具有唯一目的是检查文件是否存在与否(如Python的功能os.path.exists )。 什么是惯用的方式做到这一点?

Answer 1:

要检查文件不存在,等同于Python的if not os.path.exists(filename)

if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
  // path/to/whatever does not exist
}

要检查文件是否存在,等同于Python的if os.path.exists(filename)

编辑:每最近的评论

if _, err := os.Stat("/path/to/whatever"); err == nil {
  // path/to/whatever exists

} else if os.IsNotExist(err) {
  // path/to/whatever does *not* exist

} else {
  // Schrodinger: file may or may not exist. See err for details.

  // Therefore, do *NOT* use !os.IsNotExist(err) to test for file existence


}


Answer 2:

通过迦勒答案备用张贴在gonuts邮件列表。

[...]这不是实际需要经常和[...]使用os.Stat是它需要的情况下很容易。

[...]例如:如果你要打开的文件,没有任何理由,以检查其是否存在第一。 该文件可能消失在检查和开放之间的,反正你需要检查os.Open错误不管。 所以你只需拨打os.IsNotExist(err)您尝试打开该文件后,并与其不存在没有处理(如果需要特殊处理)。

[...]您不需要检查现有的所有路径(和你不应该)。

  • os.MkdirAll工作路径是否已经存在。 (你也需要从该呼叫检查错误。)

  • 而不是使用的os.Create ,你应该使用os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) 这样,如果该文件已经存在,你会得到一个错误。 另外这个没有别的东西使文件,不像你的版本,它事先检查存在的竞争条件。

:来自https://groups.google.com/forum/#!msg/golang-nuts/Ayx-BMNdMFo/4rL8FFHr8v4J



Answer 3:

您应该使用os.Stat()os.IsNotExist()函数,如下面的例子:

// Exists reports whether the named file or directory exists.
func Exists(name string) bool {
    if _, err := os.Stat(name); err != nil {
        if os.IsNotExist(err) {
            return false
        }
    }
    return true
}

这个例子是从提取这里 。



Answer 4:

在通过user11617例子是不正确; 它会报告该文件存在,即使在它没有的情况下,但有一些其他种类的错误。

签名应该是是否存在(字符串)(布尔,误差)。 然后,当它发生时,调用点是没有更好的。

他写会更好,因为该代码:

func Exists(name string) bool {
    _, err := os.Stat(name)
    return !os.IsNotExist(err)
}

但是,我的建议是:

func Exists(name string) (bool, error) {
  _, err := os.Stat(name)
  if os.IsNotExist(err) {
    return false, nil
  }
  return err != nil, err
}


Answer 5:

    _, err := os.Stat(file)
    if err == nil {
        log.Printf("file %s exists", file)
    } else if os.IsNotExist(err) {
        log.Printf("file %s not exists", file)
    } else {
        log.Printf("file %s stat error: %v", file, err)
    }


Answer 6:

该功能例如:

func file_is_exists(f string) bool {
    _, err := os.Stat(f)
    if os.IsNotExist(err) {
        return false
    }
    return err == nil
}


Answer 7:

让我们来看看几个方面首先,两者所提供的功能os的包golang不是工具,但错误检查器,什么才是我的意思是他们只是一个跨平台上处理错误包装。

所以基本上,如果os.Stat如果此功能不给,这意味着如果它确实需要检查什么样的错误是,在这里来使用这两个功能的文件存在任何错误os.IsNotExistos.IsExist

这可以理解为Stat文件,因为它不存在,或者是它,因为它存在,有一些问题,它抛出错误引发的错误。

这些功能需要的参数是类型的error ,虽然你可能能够通过nil到它,但它是没有意义的。

这也指出了一个事实,即IsExist is not same as !IsNotExist ,它们是这样两个不同的东西。

所以,如果你想知道,如果给定的文件中去存在,我宁愿最好的办法是现在:

if _, err := os.Stat(path/to/file); !os.IsNotExist(err){
   //TODO
} 


文章来源: How to check if a file exists in Go?