u_io.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package util
  2. import (
  3. "io"
  4. "os"
  5. "path/filepath"
  6. "sort"
  7. "strings"
  8. )
  9. // CreateDir 创建目录
  10. func CreateDir(directory string) {
  11. if _, err := os.Stat(directory); os.IsNotExist(err) {
  12. _ = os.MkdirAll(directory, os.ModePerm)
  13. }
  14. }
  15. // CreateParentDir 存在不创建,不存在则创建父目录
  16. func CreateParentDir(filePath string) error {
  17. if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
  18. return err
  19. }
  20. return nil
  21. }
  22. // RemoveDir 递归删除目录及其下的所有文件和子目录
  23. func RemoveDir(dirPath string) error {
  24. // 打开目录
  25. dir, err := os.Open(dirPath)
  26. if err != nil {
  27. return err
  28. }
  29. defer dir.Close()
  30. // 读取目录下的文件和子目录
  31. fileInfos, err := dir.Readdir(-1)
  32. if err != nil {
  33. return err
  34. }
  35. // 遍历文件和子目录
  36. for _, fileInfo := range fileInfos {
  37. path := filepath.Join(dirPath, fileInfo.Name())
  38. if fileInfo.IsDir() {
  39. // 如果是子目录,递归调用removeDir删除子目录及其下的文件和子目录
  40. if err = RemoveDir(path); err != nil {
  41. return err
  42. }
  43. } else {
  44. // 如果是文件,直接删除文件
  45. if err = os.Remove(path); err != nil {
  46. return err
  47. }
  48. }
  49. }
  50. // 删除目录本身
  51. if err = os.Remove(dirPath); err != nil {
  52. return err
  53. }
  54. return nil
  55. }
  56. // RemoveSubFiles 递归删除目录及其下的所有文件和子目录
  57. func RemoveSubFiles(dirPath string) error {
  58. // 打开目录
  59. dir, err := os.Open(dirPath)
  60. if err != nil {
  61. return err
  62. }
  63. defer dir.Close()
  64. // 读取目录下的文件和子目录
  65. fileInfos, err := dir.Readdir(-1)
  66. if err != nil {
  67. return err
  68. }
  69. // 遍历文件和子目录
  70. for _, fileInfo := range fileInfos {
  71. path := filepath.Join(dirPath, fileInfo.Name())
  72. if fileInfo.IsDir() {
  73. // 如果是子目录,递归调用removeDir删除子目录及其下的文件和子目录
  74. if err = RemoveDir(path); err != nil {
  75. return err
  76. }
  77. } else {
  78. // 如果是文件,直接删除文件
  79. if err = os.Remove(path); err != nil {
  80. return err
  81. }
  82. }
  83. }
  84. return nil
  85. }
  86. func WriteFile(sourceContent string, targetFilePath string) error {
  87. if err := CreateFile(targetFilePath); err != nil {
  88. return err
  89. }
  90. if err := os.WriteFile(targetFilePath, []byte(sourceContent), 0644); err != nil {
  91. return err
  92. }
  93. return nil
  94. }
  95. // CreateFile 存在则覆盖,不存在则创建文件
  96. func CreateFile(filePath string) error {
  97. if err := CreateParentDir(filePath); err != nil {
  98. return err
  99. }
  100. // 创建文件,如果文件已存在则覆盖
  101. file, err := os.Create(filePath)
  102. if err != nil {
  103. return err
  104. }
  105. defer func(file *os.File) {
  106. err := file.Close()
  107. if err != nil {
  108. }
  109. }(file)
  110. return nil
  111. }
  112. func ReadFile(filePath string) (string, error) {
  113. // 1 打开文件
  114. file, err := os.Open(filePath)
  115. if err != nil {
  116. return "", err
  117. }
  118. defer file.Close()
  119. // 2 读取文件内容
  120. content, err := io.ReadAll(file)
  121. if err != nil {
  122. return "", err
  123. }
  124. return string(content), err
  125. }
  126. func ListAbsolutePathWithSuffixAndSort(dir string, suffix string) ([]string, error) {
  127. var result []string
  128. if !strings.HasSuffix(dir, "/") {
  129. dir = dir + "/"
  130. }
  131. files, err := os.ReadDir(dir)
  132. if err != nil {
  133. return nil, err
  134. }
  135. for _, file := range files {
  136. if strings.HasSuffix(file.Name(), suffix) {
  137. result = append(result, dir+file.Name())
  138. }
  139. }
  140. // 根据文件名进行升序排序
  141. sort.Slice(result, func(i, j int) bool {
  142. return filepath.Base(result[i]) < filepath.Base(result[j])
  143. })
  144. return result, nil
  145. }
  146. func DeleteFile(path string) error {
  147. // 检查文件是否存在
  148. if _, err := os.Stat(path); err == nil {
  149. // 文件存在,执行删除操作
  150. err = os.Remove(path)
  151. if err != nil {
  152. return err
  153. }
  154. }
  155. return nil
  156. }
  157. func ListAbsolutePathAndSort(dir string) ([]string, error) {
  158. var result []string
  159. if !strings.HasSuffix(dir, "/") {
  160. dir = dir + "/"
  161. }
  162. files, err := os.ReadDir(dir)
  163. if err != nil {
  164. return result, err
  165. }
  166. for _, file := range files {
  167. result = append(result, dir+file.Name())
  168. }
  169. // 根据文件名进行升序排序
  170. sort.Slice(result, func(i, j int) bool {
  171. return filepath.Base(result[i]) < filepath.Base(result[j])
  172. })
  173. return result, nil
  174. }