golang go中存在检查文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang go中存在检查文件相关的知识,希望对你有一定的参考价值。

if _, err := os.Stat(dbPath); os.IsNotExist(err) {
	fmt.Println("File does not exist")
} else {
	fmt.Println("file exist")
}

如何检查Golang目录中是不是存在文件`name`(带有任何扩展名)?

【中文标题】如何检查Golang目录中是不是存在文件`name`(带有任何扩展名)?【英文标题】:How to check file `name` (with any extension) does exist in the directory in Golang?如何检查Golang目录中是否存在文件`name`(带有任何扩展名)? 【发布时间】:2017-12-20 21:17:52 【问题描述】:

我知道我可以通过以下问题的答案来检查该文件在 Golang 中是否存在。

How to check whether a file or directory denoted by a path exists in Golang? How to check if a file exists in Go? Gist - Check if file or directory exists in Golang

代码如下所示。

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


但这是我真正的问题,我如何检查指定目录中的文件名是否存在(已被使用)?例如,如果我有这样的文件树:

--- uploads
       |- foo.png
       |- bar.mp4

我想检查是否有任何文件使用指定的名称..

used := filenameUsed("uploads/foo")
fmt.Println(used) // Output: true

used = filenameUsed("uploads/hello")
fmt.Println(used) // Output: false

如何实现filenameUsed 函数?

Google 结果给了我一个path/filepath 包,但我不知道如何使用它。

【问题讨论】:

【参考方案1】:

您可以使用filepath.Glob() 函数在其中指定一个模式来列出文件。

要使用的模式基本上是您希望检查是否使用的名称,使用 any extension 模式进行扩展。

例子:

func filenameUsed(name string) (bool, error) 
    matches, err := filepath.Glob(name + ".*")
    if err != nil 
        return false, err
    
    return len(matches) > 0, nil

使用/测试它:

fmt.Print("Filename foo used: ")
fmt.Println(filenameUsed("uploads/foo"))
fmt.Print("Filename bar used: ")
fmt.Println(filenameUsed("uploads/bar"))

示例输出:

Filename foo used: true <nil>
Filename bar used: false <nil>

但是,请注意filenameUsed() 返回false(和nil 错误)并不意味着如果您尝试创建一个具有该名称的文件将不存在。意味着检查它并尝试创建这样的文件并不能保证原子性。如果您的目的是在未使用名称的情况下创建文件,则只需尝试以适当的模式创建文件(如果存在则不要覆盖),并处理该调用返回的(创建)错误。

【讨论】:

以上是关于golang go中存在检查文件的主要内容,如果未能解决你的问题,请参考以下文章

golang开发:安装 Golang

golang 检查Golang中是否存在文件或目录

golang 检查Golang中是否存在文件或目录

在 Go (Golang) 中查找文件系统对象

golang 文件操作

Golang M 2023 5 * theory