folder.go 5.5 KB

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