u_io.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package util
  2. import (
  3. "fmt"
  4. "io"
  5. "io/fs"
  6. "os"
  7. "path/filepath"
  8. "sort"
  9. "strings"
  10. )
  11. func CheckSoFilesInDirectory(dirPath string) (bool, []string) {
  12. var hasSoFile bool
  13. var soFilePaths []string
  14. err := filepath.Walk(dirPath, func(path string, info fs.FileInfo, err error) error {
  15. if err != nil {
  16. return err
  17. }
  18. if info.IsDir() {
  19. return nil
  20. }
  21. if filepath.Ext(path) == ".so" {
  22. hasSoFile = true
  23. soFilePaths = append(soFilePaths, path)
  24. }
  25. return nil
  26. })
  27. if err != nil {
  28. fmt.Println("Error walking the directory:", err)
  29. os.Exit(1)
  30. }
  31. return hasSoFile, soFilePaths
  32. }
  33. func GetFirstLevelSubdirectories(dirPath string) []string {
  34. dirEntries, _ := os.ReadDir(dirPath)
  35. subdirectories := make([]string, 0)
  36. for _, entry := range dirEntries {
  37. if entry.IsDir() {
  38. subdirectories = append(subdirectories, entry.Name())
  39. }
  40. }
  41. return subdirectories
  42. }
  43. func GetFileNameWithoutExtension(absPath string) string {
  44. file := filepath.Base(absPath)
  45. ext := filepath.Ext(file)
  46. return strings.TrimSuffix(file, ext)
  47. }
  48. func GetSoFilePaths(dir string) []string {
  49. var paths []string
  50. err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
  51. if err == nil && !info.IsDir() && filepath.Ext(path) == ".so" {
  52. absPath, _ := filepath.Abs(path)
  53. paths = append(paths, absPath)
  54. }
  55. return nil
  56. })
  57. if err != nil {
  58. fmt.Println("Error:", err)
  59. return nil
  60. }
  61. return paths
  62. }
  63. // CreateDir 创建目录
  64. func CreateDir(directory string) {
  65. if _, err := os.Stat(directory); os.IsNotExist(err) {
  66. _ = os.MkdirAll(directory, os.ModePerm)
  67. }
  68. }
  69. // CreateParentDir 存在不创建,不存在则创建父目录
  70. func CreateParentDir(filePath string) error {
  71. if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
  72. return err
  73. }
  74. return nil
  75. }
  76. // RemoveDir 递归删除目录及其下的所有文件和子目录
  77. func RemoveDir(dirPath string) error {
  78. // 打开目录
  79. dir, err := os.Open(dirPath)
  80. if err != nil {
  81. return err
  82. }
  83. defer dir.Close()
  84. // 读取目录下的文件和子目录
  85. fileInfos, err := dir.Readdir(-1)
  86. if err != nil {
  87. return err
  88. }
  89. // 遍历文件和子目录
  90. for _, fileInfo := range fileInfos {
  91. path := filepath.Join(dirPath, fileInfo.Name())
  92. if fileInfo.IsDir() {
  93. // 如果是子目录,递归调用removeDir删除子目录及其下的文件和子目录
  94. if err = RemoveDir(path); err != nil {
  95. return err
  96. }
  97. } else {
  98. // 如果是文件,直接删除文件
  99. if err = os.Remove(path); err != nil {
  100. return err
  101. }
  102. }
  103. }
  104. // 删除目录本身
  105. if err = os.Remove(dirPath); err != nil {
  106. return err
  107. }
  108. return nil
  109. }
  110. // RemoveSubFiles 递归删除目录及其下的所有文件和子目录
  111. func RemoveSubFiles(dirPath string) error {
  112. // 打开目录
  113. dir, err := os.Open(dirPath)
  114. if err != nil {
  115. return err
  116. }
  117. defer dir.Close()
  118. // 读取目录下的文件和子目录
  119. fileInfos, err := dir.Readdir(-1)
  120. if err != nil {
  121. return err
  122. }
  123. // 遍历文件和子目录
  124. for _, fileInfo := range fileInfos {
  125. path := filepath.Join(dirPath, fileInfo.Name())
  126. if fileInfo.IsDir() {
  127. // 如果是子目录,递归调用removeDir删除子目录及其下的文件和子目录
  128. if err = RemoveDir(path); err != nil {
  129. return err
  130. }
  131. } else {
  132. // 如果是文件,直接删除文件
  133. if err = os.Remove(path); err != nil {
  134. return err
  135. }
  136. }
  137. }
  138. return nil
  139. }
  140. func WriteFile(sourceContent string, targetFilePath string) error {
  141. if err := CreateFile(targetFilePath); err != nil {
  142. return err
  143. }
  144. if err := os.WriteFile(targetFilePath, []byte(sourceContent), 0644); err != nil {
  145. return err
  146. }
  147. return nil
  148. }
  149. // CreateFile 存在则覆盖,不存在则创建文件
  150. func CreateFile(filePath string) error {
  151. if err := CreateParentDir(filePath); err != nil {
  152. return err
  153. }
  154. // 创建文件,如果文件已存在则覆盖
  155. file, err := os.Create(filePath)
  156. if err != nil {
  157. return err
  158. }
  159. defer func(file *os.File) {
  160. err := file.Close()
  161. if err != nil {
  162. }
  163. }(file)
  164. return nil
  165. }
  166. func ReadFile(filePath string) (string, error) {
  167. // 1 打开文件
  168. file, err := os.Open(filePath)
  169. if err != nil {
  170. return "", err
  171. }
  172. defer file.Close()
  173. // 2 读取文件内容
  174. content, err := io.ReadAll(file)
  175. if err != nil {
  176. return "", err
  177. }
  178. return string(content), err
  179. }
  180. func ListAbsolutePathWithSuffixAndSort(dir string, suffix string) ([]string, error) {
  181. var result []string
  182. if !strings.HasSuffix(dir, "/") {
  183. dir = dir + "/"
  184. }
  185. files, err := os.ReadDir(dir)
  186. if err != nil {
  187. return nil, err
  188. }
  189. for _, file := range files {
  190. if strings.HasSuffix(file.Name(), suffix) {
  191. result = append(result, dir+file.Name())
  192. }
  193. }
  194. // 根据文件名进行升序排序
  195. sort.Slice(result, func(i, j int) bool {
  196. return filepath.Base(result[i]) < filepath.Base(result[j])
  197. })
  198. return result, nil
  199. }
  200. func DeleteFile(path string) error {
  201. // 检查文件是否存在
  202. if _, err := os.Stat(path); err == nil {
  203. // 文件存在,执行删除操作
  204. err = os.Remove(path)
  205. if err != nil {
  206. return err
  207. }
  208. }
  209. return nil
  210. }
  211. func ListAbsolutePathAndSort(dir string) ([]string, error) {
  212. var result []string
  213. if !strings.HasSuffix(dir, "/") {
  214. dir = dir + "/"
  215. }
  216. files, err := os.ReadDir(dir)
  217. if err != nil {
  218. return result, err
  219. }
  220. for _, file := range files {
  221. result = append(result, dir+file.Name())
  222. }
  223. // 根据文件名进行升序排序
  224. sort.Slice(result, func(i, j int) bool {
  225. return filepath.Base(result[i]) < filepath.Base(result[j])
  226. })
  227. return result, nil
  228. }
  229. // WriteStringToFile 将字符串写入指定的文件路径
  230. func WriteStringToFile(content string, filePath string) {
  231. // 方法一:使用os包
  232. file, err := os.Create(filePath)
  233. if err != nil {
  234. fmt.Println("创建文件失败:", err)
  235. return
  236. }
  237. defer file.Close()
  238. _, err = file.WriteString(content)
  239. if err != nil {
  240. fmt.Println("写入文件失败:", err)
  241. return
  242. }
  243. fmt.Println("字符串成功写入文件(os包)")
  244. }