file.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package core
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "sort"
  8. )
  9. // GetAllFilePath 获取指定目录内的文件和子目录的文件,递归获取
  10. func GetAllFilePath(filePaths []string, currentPath string) ([]string, error) {
  11. //2021-12-23
  12. files, err := ioutil.ReadDir(currentPath)
  13. if err != nil {
  14. log.Printf("filepath.Glob error : %v\n", err)
  15. return filePaths, err
  16. }
  17. for _, f := range files {
  18. if f.IsDir() {
  19. ret, err := GetAllFilePath(filePaths, filepath.Join(currentPath, f.Name()))
  20. if err != nil {
  21. log.Printf("GetAllFilePath eror: %v\n", err)
  22. return filePaths, err
  23. } else {
  24. filePaths = append(filePaths, ret...)
  25. }
  26. } else {
  27. filePaths = append(filePaths, filepath.Join(currentPath, f.Name()))
  28. }
  29. }
  30. return filePaths, nil
  31. }
  32. // FileExists 检测文件是否存在
  33. func FileExists(filePath string) (bool, error) {
  34. _, err := os.Stat(filePath)
  35. if err == nil {
  36. return true, nil
  37. }
  38. if os.IsNotExist(err) {
  39. return false, nil
  40. }
  41. return false, err
  42. }
  43. // GetFileFromFolder 获取子文件夹里的文件名列表
  44. func GetFileFromFolder(folder string) ([]string, error) {
  45. filePaths := []string{}
  46. files, err := ioutil.ReadDir(folder)
  47. if err != nil {
  48. log.Printf("filepath.Glob error : %v\n", err)
  49. return filePaths, err
  50. }
  51. for _, f := range files {
  52. filePaths = append(filePaths, filepath.Join(folder, f.Name()))
  53. }
  54. return filePaths, nil
  55. }
  56. // RemoveFiles 删除指定路径和指定后缀的文件
  57. func RemoveFiles(folder, suffix string) error {
  58. filePaths, err := GetFileFromFolder(folder)
  59. if err != nil {
  60. log.Printf("GetFileFromFolder error : %v\n", err)
  61. return err
  62. }
  63. for _, filePath := range filePaths {
  64. if filePath[len(filePath)-len(suffix):] == suffix {
  65. err = os.Remove(filePath)
  66. if err != nil {
  67. log.Printf("Remove error : %v\n", err)
  68. }
  69. }
  70. }
  71. return nil
  72. }
  73. // GetSubTitleByModTime 从指定路径获取字幕文件,按mod时间排序
  74. func GetSubTitleByModTime(folder string) (string, error) {
  75. //2021-11-03
  76. filePaths := []string{}
  77. files, err := ioutil.ReadDir(folder)
  78. if err != nil {
  79. log.Printf("filepath.Glob error : %v\n", err)
  80. return filePaths[0], err
  81. }
  82. //按mod时间排序
  83. sort.Slice(files, func(i, j int) bool {
  84. flag := false
  85. if files[i].ModTime().After(files[j].ModTime()) {
  86. flag = true
  87. } else if files[i].ModTime().Equal(files[j].ModTime()) {
  88. if files[i].Name() < files[j].Name() {
  89. flag = true
  90. }
  91. }
  92. return flag
  93. })
  94. for _, f := range files {
  95. filePaths = append(filePaths, filepath.Join(folder, f.Name()))
  96. }
  97. return filePaths[0], err
  98. }