File 如何检查Golang目录中是否存在文件名(具有任何扩展名)?

File 如何检查Golang目录中是否存在文件名(具有任何扩展名)?,file,go,path,directory,file-exists,File,Go,Path,Directory,File Exists,我知道我可以通过以下问题的答案来检查该文件是否存在于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",

我知道我可以通过以下问题的答案来检查该文件是否存在于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
功能

谷歌给了我一个软件包作为结果,但我不知道如何使用它。

你可以使用这个功能,你可以指定一个模式来列出文件

要使用的模式基本上就是您希望检查是否使用的名称,并使用任何扩展模式进行扩展

例如:

func filenameUsed(name string) (bool, error) {
    matches, err := filepath.Glob(name + ".*")
    if err != nil {
        return false, err
    }
    return len(matches) > 0, nil
}
使用/测试it:

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>
foo使用的文件名:true
使用的文件名栏:false
但是,请注意,
filenameUsed()
返回
false
(和
nil
错误)并不意味着如果您尝试在之后创建一个同名文件,则该文件将不存在。这意味着检查它并尝试创建这样一个文件并不能保证原子性。如果您的目的是在不使用名称的情况下创建文件,那么只需尝试以正确的模式创建文件(如果存在,请不要覆盖),并处理该调用返回的(创建)错误