Files
bl/common/utils/file.go

60 lines
1.5 KiB
Go
Raw Normal View History

package utils
import (
"fmt"
"io/fs"
"os"
"path/filepath"
"strings"
)
// GetLatestLogicFile 遍历指定目录返回以logic_为前缀的最新修改文件路径
// dirPath: 目标目录路径(绝对路径或相对路径均可)
func GetLatestLogicFile(dirPath string) (string, error) {
// 1. 读取目录下所有文件/目录项
entries, err := os.ReadDir(dirPath)
if err != nil {
return "", fmt.Errorf("读取目录失败: %w", err)
}
var (
latestFile string // 记录最新文件的路径
latestModTime fs.FileInfo // 记录最新文件的文件信息(用于对比时间)
)
// 2. 遍历所有目录项,筛选并对比
for _, entry := range entries {
// 跳过目录,只处理普通文件
if entry.IsDir() {
continue
}
// 筛选以logic_开头的文件
filename := entry.Name()
if !strings.HasPrefix(filename, "logic_") {
continue
}
// 3. 获取文件的完整路径和详细信息(包含修改时间)
fileFullPath := filepath.Join(dirPath, filename)
fileInfo, err := os.Stat(fileFullPath)
if err != nil {
fmt.Printf("获取文件[%s]信息失败,跳过: %v\n", fileFullPath, err)
continue
}
// 4. 对比修改时间,更新最新文件记录
if latestModTime == nil || fileInfo.ModTime().After(latestModTime.ModTime()) {
latestFile = filename
latestModTime = fileInfo
}
}
// 5. 处理无符合条件文件的情况
if latestFile == "" {
return "", fmt.Errorf("目录[%s]下无符合条件的logic_前缀文件", dirPath)
}
return latestFile, nil
}