util_io.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package util
  2. import (
  3. "os"
  4. "path/filepath"
  5. "sort"
  6. "strings"
  7. )
  8. func ListAbsolutePathWithSuffixAndSort(dir string, suffix string) ([]string, error) {
  9. var result []string
  10. if !strings.HasSuffix(dir, "/") {
  11. dir = dir + "/"
  12. }
  13. files, err := os.ReadDir(dir)
  14. if err != nil {
  15. return nil, err
  16. }
  17. for _, file := range files {
  18. if strings.HasSuffix(file.Name(), suffix) {
  19. result = append(result, dir+file.Name())
  20. }
  21. }
  22. // 根据文件名进行升序排序
  23. sort.Slice(result, func(i, j int) bool {
  24. return filepath.Base(result[i]) < filepath.Base(result[j])
  25. })
  26. return result, nil
  27. }
  28. // RemoveDir 递归删除目录及其下的所有文件和子目录
  29. func RemoveDir(dirPath string) error {
  30. // 打开目录
  31. dir, err := os.Open(dirPath)
  32. if err != nil {
  33. return err
  34. }
  35. defer dir.Close()
  36. // 读取目录下的文件和子目录
  37. fileInfos, err := dir.Readdir(-1)
  38. if err != nil {
  39. return err
  40. }
  41. // 遍历文件和子目录
  42. for _, fileInfo := range fileInfos {
  43. path := filepath.Join(dirPath, fileInfo.Name())
  44. if fileInfo.IsDir() {
  45. // 如果是子目录,递归调用removeDir删除子目录及其下的文件和子目录
  46. RemoveDir(path)
  47. } else {
  48. // 如果是文件,直接删除文件
  49. err = os.Remove(path)
  50. if err != nil {
  51. return err
  52. }
  53. }
  54. }
  55. // 删除目录本身
  56. err = os.Remove(dirPath)
  57. if err != nil {
  58. return err
  59. }
  60. return nil
  61. }