当前位置: 首页 > 知识库问答 >
问题:

如何检查Go中是否存在文件?

黎征
2023-03-14

Go的标准库没有专门用于检查文件是否存在的功能(如Python的os.path.exists)。

共有3个答案

徐星阑
2023-03-14

您应该使用操作系统。Stat()和操作系统。IsNotExist()的功能如下例所示:

func Exists(name string) (bool, error) {
    _, err := os.Stat(name)
    if err == nil {
        return true, nil
    }
    if errors.Is(err, os.ErrNotExist) {
        return false, nil
    }
    return false, err
}

edit1:修复了在某些情况下返回true的问题
编辑2:切换到使用错误。Is()来自操作系统。IsNotExist(),许多人认为这是一种最佳实践

程英资
2023-03-14

答案由Caleb Spare在gonuts邮件列表中发布。

[...]实际上并不经常需要它,并且[...]使用os. Stat对于需要它的情况来说很容易。

[...] 例如:如果要打开文件,没有理由先检查它是否存在。文件可能会在检查和打开之间消失,无论如何,您需要检查操作系统。无论出现何种错误,请打开。因此,您只需调用操作系统。IsNotExist(err)在您尝试打开该文件并处理其中不存在的文件后(如果需要特殊处理)。

[...]你根本不需要检查现有的路径(你不应该)。

>

  • <代码>操作系统。无论路径是否已经存在,MkdirAll都会工作。(您还需要检查该调用的错误。)

    而不是使用操作系统。创建时,应使用操作系统。OpenFile(路径,os.O\u RDWR | os.O\u CREATE | os.O\u EXCL,0666)。这样,如果文件已经存在,就会出现错误。此外,与您的版本不同的是,它没有与生成文件的其他内容竞争的条件,而您的版本会事先检查是否存在。

    取自:https://groups.google.com/forum/#!msg/Go语言-ns/Ayx-BMNdMFo/4rL8FFHr8v4J

  • 魏楷
    2023-03-14

    检查文件是否不存在,相当于Python的操作系统(如果不存在)。路径存在(文件名):

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

    检查文件是否存在,相当于Python的if操作系统。路径存在(文件名):

    编辑:根据最近的评论

    if _, err := os.Stat("/path/to/whatever"); err == nil {
      // path/to/whatever exists
    
    } else if errors.Is(err, os.ErrNotExist) {
      // 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
    
    
    }
    
     类似资料:
    • Go的标准库没有专门用于检查文件是否存在的功能(如Python的)。

    • 问题内容: 在打开文件以Java读取之前,如何检查文件是否存在?(相当于Perl的)。 关于SO的唯一类似问题涉及写入文件,因此使用回答了该问题,这显然不适用于此处。 如果可能的话,我宁愿使用真正的API调用返回,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查’无文件’的情况下捕获”,但是我可以接受后者。 问题答案: 使用:

    • 问题内容: 我正在使用Java 7 IO的新功能,实际上我试图接收文件夹的所有xml文件。但这在文件夹不存在时引发异常,如何检查新IO是否存在该文件夹? 问题答案: 使用: 您可以选择传递此方法的值: 还有一种方法:

    • 问题内容: 我需要检查远程服务器上是否存在特定文件。使用和不起作用。有什么想法如何快速轻松地做到这一点? 问题答案: 您必须使用CURL

    • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

    • 我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?