Golang如何从文件夹中获取最新文件
Golang如何从文件夹中获取最新文件
我需要从子文件夹中获取最新的文件。我使用了 os.ReadDir。
它非常快,但它没有给我完整的文件路径…
如何实现这一点。
func main() {
fmt.Println("hello world")
}
4 回复
谢谢。
我尝试过 filepath.Walk,与 readdir 相比它速度较慢。
我会再检查一下。
更多关于Golang如何从文件夹中获取最新文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用 filepath 包,例如:
import (
"fmt"
"os"
"path/filepath"
)
files, _ = os.ReadDir(dir)
path, _ := filepath.Abs(dir)
for _, file := range files {
fmt.Println(filepath.Join(path, file.Name())
}
我需要获取子文件夹中最新的文件。我使用了
os.readdir,它速度很快,但没有给我完整的文件路径……该如何实现?
试试这个:
type FileInfo struct {
os.FileInfo
FullPath string
}
func GetLatestFileInDir(dir string) (*FileInfo, error) {
var files []FileInfo
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
files = append(files, FileInfo{FileInfo: info, FullPath: path})
}
return nil
})
if err != nil {
return nil, err
}
if len(files) == 0 {
return nil, fmt.Errorf("no files found in directory %s", dir)
}
// 按修改时间对文件进行排序
sort.Slice(files, func(i, j int) bool {
return files[i].ModTime().After(files[j].ModTime())
})
// 返回最新的文件
return &files[0], nil
}
你可以使用 os.ReadDir 读取目录,然后通过 os.Stat 获取文件信息并比较修改时间。以下是示例代码:
package main
import (
"fmt"
"os"
"path/filepath"
"time"
)
func getLatestFile(dir string) (string, error) {
var latestFile string
var latestTime time.Time
entries, err := os.ReadDir(dir)
if err != nil {
return "", err
}
for _, entry := range entries {
if entry.IsDir() {
continue
}
info, err := entry.Info()
if err != nil {
continue
}
fullPath := filepath.Join(dir, entry.Name())
if info.ModTime().After(latestTime) {
latestTime = info.ModTime()
latestFile = fullPath
}
}
return latestFile, nil
}
func main() {
dir := "./your/subfolder"
latest, err := getLatestFile(dir)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Latest file:", latest)
}
如果需要递归搜索子文件夹:
func getLatestFileRecursive(dir string) (string, error) {
var latestFile string
var latestTime time.Time
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && info.ModTime().After(latestTime) {
latestTime = info.ModTime()
latestFile = path
}
return nil
})
return latestFile, err
}

