Search 如何通过文件的基名称(无扩展名)检查文件是否存在?

Search 如何通过文件的基名称(无扩展名)检查文件是否存在?,search,go,filesystems,Search,Go,Filesystems,这个问题不言自明 请问,有谁能告诉我如何用简单有效的方法按名称(不带扩展名)检查文件的存在性。若文件夹中有多个同名文件,那个么若代码返回多个实例,那个就太好了 例如: folder/ file.html file.md 更新: 官方文档中没有明确说明如何使用filepath.Match()或filepath.Glob()函数之一。下面是一些例子: matches, _ := filepath.Glob("./folder/file*") //returns paths

这个问题不言自明

请问,有谁能告诉我如何用简单有效的方法按名称(不带扩展名)检查文件的存在性。若文件夹中有多个同名文件,那个么若代码返回多个实例,那个就太好了

例如:

folder/
  file.html
  file.md
更新:

官方文档中没有明确说明如何使用
filepath.Match()
filepath.Glob()
函数之一。下面是一些例子:

matches, _          := filepath.Glob("./folder/file*") //returns paths to real files [folder/file.html, folder/file.md]
matchesToPattern, _ := filepath.Match("./folder/file*", "./folder/file.html") //returns true, but it is just compare strings and doesn't check real content
你需要使用

要检查的函数有:
Glob()
Match()
Walk()
-选择更适合您口味的函数。

您需要使用


要检查的函数有:
Glob()
Match()
Walk()
-选择更适合您口味的函数。

以下是更新的代码:

package main

import (
    "fmt"
    "os"
    "path/filepath"
    "regexp"
)

func main() {
    dirname := "." + string(filepath.Separator)
    d, err := os.Open(dirname)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer d.Close()
    fi, err := d.Readdir(-1)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    r, _ := regexp.Compile("f([a-z]+)le") // the string to match
    for _, fi := range fi {
        if fi.Mode().IsRegular() { // is file
            if r.Match([]byte(fi.Name())) { // if it match
                fmt.Println(fi.Name(), fi.Size(), "bytes")
            }
        }
    }
}

使用此选项,您还可以搜索日期、大小、包含子文件夹或文件属性。

以下是更新的代码:

package main

import (
    "fmt"
    "os"
    "path/filepath"
    "regexp"
)

func main() {
    dirname := "." + string(filepath.Separator)
    d, err := os.Open(dirname)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer d.Close()
    fi, err := d.Readdir(-1)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    r, _ := regexp.Compile("f([a-z]+)le") // the string to match
    for _, fi := range fi {
        if fi.Mode().IsRegular() { // is file
            if r.Match([]byte(fi.Name())) { // if it match
                fmt.Println(fi.Name(), fi.Size(), "bytes")
            }
        }
    }
}

使用此工具,您还可以搜索日期、大小、包含子文件夹或文件属性。

不,您是程序员,因此应该进行编程。这意味着要阅读文档并进行尝试。请在尝试Glob()和Match()后阅读,我意识到这正是我想要的!非常感谢。不,你是一名程序员,因此应该进行编程。这意味着要阅读文档并进行尝试。请在尝试Glob()和Match()后阅读,我意识到这正是我想要的!非常感谢。这并不是我真正发现的——我想有人可以提供一些区别于仅仅使用file Walker的东西——但是……谢谢)@Timur Fayzrakhmanov如果你看这个链接[link](),你可以把我的代码缩短一点。另外,Readdir会对结果进行排序,而Glob不会。谢谢链接。我发现您的代码有点“低级”,所以到时候我会重新查看您的代码。关于链接,我已经使用ReadDir函数获取文件夹文件列表。我认为Glob应该按预期使用,而不是列出文件夹的内容,你不这样认为吗?@Timur Fayzrakhmanov Glob只返回文件名,其他什么都不返回,然而,使用Glob,你可以从一开始就知道列表中需要哪些文件。虽然Readdir没有提供此选项,但它提供了对所显示内容的更多控制。但是Glob和Readdir之间的差异很小。尽管如此,我认为Glob速度更快。嗯……这是值得思考的。如果我们只需要查看文件夹的内容,而不需要做任何其他事情,那么就应该使用Glob。据推测,Glob可能更快,占用更少的内存。这并不是我真正发现的-我想有人可以提供一些区别于仅使用file Walker的东西-但仍然…谢谢)@Timur Fayzrakhmanov如果你看这个链接[link](),你可以让我的代码稍微短一点。另外,Readdir会对结果进行排序,而Glob不会。谢谢链接。我发现您的代码有点“低级”,所以到时候我会重新查看您的代码。关于链接,我已经使用ReadDir函数获取文件夹文件列表。我认为Glob应该按预期使用,而不是列出文件夹的内容,你不这样认为吗?@Timur Fayzrakhmanov Glob只返回文件名,其他什么都不返回,然而,使用Glob,你可以从一开始就知道列表中需要哪些文件。虽然Readdir没有提供此选项,但它提供了对所显示内容的更多控制。但是Glob和Readdir之间的差异很小。尽管如此,我认为Glob速度更快。嗯……这是值得思考的。如果我们只需要查看文件夹的内容,而不需要做任何其他事情,那么就应该使用Glob。据推测,Glob可能更快,占用更少的内存。