gpt4 book ai didi

file - 如何查看Golang目录下是否存在 `name`(任意扩展名)文件?

转载 作者:IT王子 更新时间:2023-10-29 01:44:41 28 4
gpt4 key购买 nike

我知道我可以通过以下问题的答案来检查文件是否存在于 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结果包,但我不知道如何使用它。

最佳答案

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

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

例子:

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

关于file - 如何查看Golang目录下是否存在 `name`(任意扩展名)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45125542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com