package fileop import ( "os" "crazy-fox-backend-api/config" "crazy-fox-backend-api/model" "crazy-fox-backend-api/utils/zaplog" "crazy-fox-backend-api/global" ) func Exist(path string) (bool, error) { _, err := os.Stat(path) if err != nil { if os.IsNotExist(err) { return false, nil } return false, err } return true, nil } // PathExists 文件目录是否存在 func PathExists(path string) bool { exist, err := Exist(path) if err != nil || !exist { return false } return IsDir(path) } // IsDir 判断所给路径是否为文件夹 func IsDir(path string) bool { s, err := os.Stat(path) if err != nil { return false } return s.IsDir() } // DirCreate 批量创建文件夹 func DirCreate(dirs ...string) (err error) { for _, v := range dirs { if !PathExists(v) { global.ZapLog.Info("create directory: " + v) if err = os.MkdirAll(v, os.ModePerm); err != nil { zaplog.Error("create directory: "+v, err) return err } } } return err } // DirList 目录下的文件列表 func DirList(path string) ([]model.FileInfo, error) { files, err := os.ReadDir(path) if err != nil { return nil, nil } fileList := make([]model.FileInfo, 0, len(files)) for _, file := range files { info, err := file.Info() if err != nil { return nil, nil } fileTyp := FileType(info) fileList = append(fileList, model.FileInfo{ Name: info.Name(), ModDate: info.ModTime().Format(config.DateTime), Type: fileTyp, Perm: info.Mode().String()[1:], TypeName: fileTypeName(fileTyp), Size: fileSize(info), }) } return fileList, nil } // fileSize 获取文件大小 func fileSize(info os.FileInfo) string { if info.IsDir() { return "" } return FileSizeFormat(uint64(info.Size())) }