file.go 2.4 KB

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