folder.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package my_util
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
  4. "os"
  5. "path/filepath"
  6. )
  7. // --------------------------------------------------------------
  8. // Debug
  9. // --------------------------------------------------------------
  10. // GetRootDebugFolder 在程序的根目录新建,调试用文件夹
  11. func GetRootDebugFolder() (string, error) {
  12. if global_value.DefDebugFolder == "" {
  13. nowProcessRoot, _ := os.Getwd()
  14. nowProcessRoot = filepath.Join(nowProcessRoot, DebugFolder)
  15. err := os.MkdirAll(nowProcessRoot, os.ModePerm)
  16. if err != nil {
  17. return "", err
  18. }
  19. global_value.DefDebugFolder = nowProcessRoot
  20. return nowProcessRoot, err
  21. }
  22. return global_value.DefDebugFolder, nil
  23. }
  24. // GetDebugFolderByName 根据传入的 strings (["aa", "bb"]) 组成 DebugFolder/aa/bb 这样的路径
  25. func GetDebugFolderByName(names []string) (string, error) {
  26. rootPath, err := GetRootDebugFolder()
  27. if err != nil {
  28. return "", err
  29. }
  30. tmpFolderFullPath := ""
  31. for _, name := range names {
  32. tmpFolderFullPath = filepath.Join(rootPath, name)
  33. }
  34. err = os.MkdirAll(tmpFolderFullPath, os.ModePerm)
  35. if err != nil {
  36. return "", err
  37. }
  38. return tmpFolderFullPath, nil
  39. }
  40. // CopyFiles2DebugFolder 把文件放入到 Debug 文件夹中,新建 desFolderName 文件夹
  41. func CopyFiles2DebugFolder(names []string, subFiles []string) error {
  42. debugFolderByName, err := GetDebugFolderByName(names)
  43. if err != nil {
  44. return err
  45. }
  46. // 复制下载在 tmp 文件夹中的字幕文件到视频文件夹下面
  47. for _, subFile := range subFiles {
  48. newFn := filepath.Join(debugFolderByName, filepath.Base(subFile))
  49. err = CopyFile(subFile, newFn)
  50. if err != nil {
  51. return err
  52. }
  53. }
  54. return nil
  55. }
  56. // --------------------------------------------------------------
  57. // Tmp
  58. // --------------------------------------------------------------
  59. // GetRootTmpFolder 在程序的根目录新建,取缓用文件夹,每一个视频的缓存将在其中额外新建子集文件夹
  60. func GetRootTmpFolder() (string, error) {
  61. if global_value.DefTmpFolder == "" {
  62. nowProcessRoot, _ := os.Getwd()
  63. nowProcessRoot = filepath.Join(nowProcessRoot, TmpFolder)
  64. err := os.MkdirAll(nowProcessRoot, os.ModePerm)
  65. if err != nil {
  66. return "", err
  67. }
  68. global_value.DefTmpFolder = nowProcessRoot
  69. return nowProcessRoot, err
  70. }
  71. return global_value.DefTmpFolder, nil
  72. }
  73. // GetTmpFolderByName 获取缓存的文件夹,没有则新建
  74. func GetTmpFolderByName(folderName string) (string, error) {
  75. rootPath, err := GetRootTmpFolder()
  76. if err != nil {
  77. return "", err
  78. }
  79. tmpFolderFullPath := filepath.Join(rootPath, folderName)
  80. err = os.MkdirAll(tmpFolderFullPath, os.ModePerm)
  81. if err != nil {
  82. return "", err
  83. }
  84. return tmpFolderFullPath, nil
  85. }
  86. // ClearTmpFolderByName 清理指定的缓存文件夹
  87. func ClearTmpFolderByName(folderName string) error {
  88. nowTmpFolder, err := GetTmpFolderByName(folderName)
  89. if err != nil {
  90. return err
  91. }
  92. return ClearFolder(nowTmpFolder)
  93. }
  94. // ClearRootTmpFolder 清理缓存的根目录,将里面的子文件夹一并清理
  95. func ClearRootTmpFolder() error {
  96. nowTmpFolder, err := GetRootTmpFolder()
  97. if err != nil {
  98. return err
  99. }
  100. pathSep := string(os.PathSeparator)
  101. files, err := os.ReadDir(nowTmpFolder)
  102. if err != nil {
  103. return err
  104. }
  105. for _, curFile := range files {
  106. fullPath := nowTmpFolder + pathSep + curFile.Name()
  107. if curFile.IsDir() {
  108. err = os.RemoveAll(fullPath)
  109. if err != nil {
  110. return err
  111. }
  112. } else {
  113. // 这里就是文件了
  114. err = os.Remove(fullPath)
  115. if err != nil {
  116. return err
  117. }
  118. }
  119. }
  120. return nil
  121. }
  122. // --------------------------------------------------------------
  123. // Sub Fix Cache
  124. // --------------------------------------------------------------
  125. // GetRootSubFixCacheFolder 在程序的根目录新建,字幕时间校正的缓存文件夹
  126. func GetRootSubFixCacheFolder() (string, error) {
  127. if global_value.DefSubFixCacheFolder == "" {
  128. nowProcessRoot, _ := os.Getwd()
  129. nowProcessRoot = filepath.Join(nowProcessRoot, SubFixCacheFolder)
  130. err := os.MkdirAll(nowProcessRoot, os.ModePerm)
  131. if err != nil {
  132. return "", err
  133. }
  134. global_value.DefSubFixCacheFolder = nowProcessRoot
  135. return nowProcessRoot, err
  136. }
  137. return global_value.DefSubFixCacheFolder, nil
  138. }
  139. // GetSubFixCacheFolderByName 获取缓存的文件夹,没有则新建
  140. func GetSubFixCacheFolderByName(folderName string) (string, error) {
  141. rootPath, err := GetRootSubFixCacheFolder()
  142. if err != nil {
  143. return "", err
  144. }
  145. tmpFolderFullPath := filepath.Join(rootPath, folderName)
  146. err = os.MkdirAll(tmpFolderFullPath, os.ModePerm)
  147. if err != nil {
  148. return "", err
  149. }
  150. return tmpFolderFullPath, nil
  151. }
  152. // --------------------------------------------------------------
  153. // Common
  154. // --------------------------------------------------------------
  155. // ClearFolder 清空文件夹
  156. func ClearFolder(folderFullPath string) error {
  157. pathSep := string(os.PathSeparator)
  158. files, err := os.ReadDir(folderFullPath)
  159. if err != nil {
  160. return err
  161. }
  162. for _, curFile := range files {
  163. fullPath := folderFullPath + pathSep + curFile.Name()
  164. if curFile.IsDir() {
  165. err = os.RemoveAll(fullPath)
  166. if err != nil {
  167. return err
  168. }
  169. } else {
  170. // 这里就是文件了
  171. err = os.Remove(fullPath)
  172. if err != nil {
  173. return err
  174. }
  175. }
  176. }
  177. return nil
  178. }
  179. const (
  180. DebugFolder = "CSF-DebugThings" // 调试相关的文件夹
  181. TmpFolder = "CSF-TmpThings" // 临时缓存的文件夹
  182. SubFixCacheFolder = "CSF-SubFixCache" // 字幕时间校正的缓存文件夹,一般可以不清理
  183. )