file.go 2.4 KB

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