directory.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package fileop
  2. import (
  3. "os"
  4. "crazy-fox-backend-api/config"
  5. "crazy-fox-backend-api/model"
  6. "crazy-fox-backend-api/utils/zaplog"
  7. "crazy-fox-backend-api/global"
  8. )
  9. func Exist(path string) (bool, error) {
  10. _, err := os.Stat(path)
  11. if err != nil {
  12. if os.IsNotExist(err) {
  13. return false, nil
  14. }
  15. return false, err
  16. }
  17. return true, nil
  18. }
  19. // PathExists 文件目录是否存在
  20. func PathExists(path string) bool {
  21. exist, err := Exist(path)
  22. if err != nil || !exist {
  23. return false
  24. }
  25. return IsDir(path)
  26. }
  27. // IsDir 判断所给路径是否为文件夹
  28. func IsDir(path string) bool {
  29. s, err := os.Stat(path)
  30. if err != nil {
  31. return false
  32. }
  33. return s.IsDir()
  34. }
  35. // DirCreate 批量创建文件夹
  36. func DirCreate(dirs ...string) (err error) {
  37. for _, v := range dirs {
  38. if !PathExists(v) {
  39. global.ZapLog.Info("create directory: " + v)
  40. if err = os.MkdirAll(v, os.ModePerm); err != nil {
  41. zaplog.Error("create directory: "+v, err)
  42. return err
  43. }
  44. }
  45. }
  46. return err
  47. }
  48. // DirList 目录下的文件列表
  49. func DirList(path string) ([]model.FileInfo, error) {
  50. files, err := os.ReadDir(path)
  51. if err != nil {
  52. return nil, nil
  53. }
  54. fileList := make([]model.FileInfo, 0, len(files))
  55. for _, file := range files {
  56. info, err := file.Info()
  57. if err != nil {
  58. return nil, nil
  59. }
  60. fileTyp := FileType(info)
  61. fileList = append(fileList, model.FileInfo{
  62. Name: info.Name(),
  63. ModDate: info.ModTime().Format(config.DateTime),
  64. Type: fileTyp,
  65. Perm: info.Mode().String()[1:],
  66. TypeName: fileTypeName(fileTyp),
  67. Size: fileSize(info),
  68. })
  69. }
  70. return fileList, nil
  71. }
  72. // fileSize 获取文件大小
  73. func fileSize(info os.FileInfo) string {
  74. if info.IsDir() {
  75. return ""
  76. }
  77. return FileSizeFormat(uint64(info.Size()))
  78. }