ZBLOG

使用 golang 写一段代码,要求:1. 从指定目录查找指定文件(cf_.*)2. 如果文件有多个,取修改时间最近的那个文件

以下是使用golang实现的代码,它可以从指定目录查找以“cf_”开头的文件,并返回修改时间最近的那个文件名和修改时间。

package main

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

func main() {
    dir := "/path/to/directory" // 指定目录路径
    pattern := "cf_*"           // 文件名匹配模式

    newestFile, err := findNewestFile(dir, pattern)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Newest file: %s (modified at %v)\n", newestFile.Name(), newestFile.ModTime())
}

func findNewestFile(dir string, pattern string) (*os.FileInfo, error) {
    var newestFile *os.FileInfo
    var modTime time.Time

    err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
        if !info.IsDir() && matchesPattern(info.Name(), pattern) {
            if info.ModTime().After(modTime) {
                newestFile = &info
                modTime = info.ModTime()
            }
        }
        return nil
    })

    if err != nil {
        return nil, err
    }

    if newestFile == nil {
        return nil, fmt.Errorf("No files found matching '%s'", pattern)
    }

    return newestFile, nil
}

func matchesPattern(name string, pattern string) bool {
  matched, _ := filepath.Match(pattern, name)
  return matched
}

请注意,在上面的代码中,我们使用filepath.Walk函数来遍历目录中的所有文件,并检查每个文件是否匹配指定的模式。如果找到匹配的文件,则检查其修改时间是否比已知的最近文件更近,并在必要时更新newestFilemodTime变量。最终,我们将返回具有最新修改时间的文件的名称和信息。

请注意,在findNewestFile函数中,我们使用了指向os.FileInfo类型值的指针,而不是该类型本身。这是因为在遍历目录时,每个文件都会作为一个新对象传递给回调函数。因此,如果我们要跟踪最新的文件信息,我们需要存储指向该对象的指针。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=4830

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?