以下是使用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函数来遍历目录中的所有文件,并检查每个文件是否匹配指定的模式。如果找到匹配的文件,则检查其修改时间是否比已知的最近文件更近,并在必要时更新newestFile和modTime变量。最终,我们将返回具有最新修改时间的文件的名称和信息。
请注意,在findNewestFile函数中,我们使用了指向os.FileInfo类型值的指针,而不是该类型本身。这是因为在遍历目录时,每个文件都会作为一个新对象传递给回调函数。因此,如果我们要跟踪最新的文件信息,我们需要存储指向该对象的指针。




