File 如何检查Golang目录中是否存在文件名(具有任何扩展名)?
我知道我可以通过以下问题的答案来检查该文件是否存在于GolangFile 如何检查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",
_, 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
错误)并不意味着如果您尝试在之后创建一个同名文件,则该文件将不存在。这意味着检查它并尝试创建这样一个文件并不能保证原子性。如果您的目的是在不使用名称的情况下创建文件,那么只需尝试以正确的模式创建文件(如果存在,请不要覆盖),并处理该调用返回的(创建)错误