file_utils.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package file
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "io/fs"
  7. "io/ioutil"
  8. "log"
  9. "os"
  10. "path/filepath"
  11. "regexp"
  12. "strings"
  13. )
  14. // Copy 复制目录下的所有文件
  15. func Copy(from, to string) error {
  16. var err error
  17. f, err := os.Stat(from)
  18. if err != nil {
  19. return err
  20. }
  21. fn := func(fromFile string) error {
  22. //复制文件的路径
  23. rel, err := filepath.Rel(from, fromFile)
  24. if err != nil {
  25. return err
  26. }
  27. toFile := filepath.Join(to, rel)
  28. //创建复制文件目录
  29. if err = os.MkdirAll(filepath.Dir(toFile), 0777); err != nil {
  30. return err
  31. }
  32. //读取源文件
  33. file, err := os.Open(fromFile)
  34. if err != nil {
  35. return err
  36. }
  37. defer file.Close()
  38. bufReader := bufio.NewReader(file)
  39. // 创建复制文件用于保存
  40. out, err := os.Create(toFile)
  41. if err != nil {
  42. return err
  43. }
  44. defer out.Close()
  45. // 然后将文件流和文件流对接起来
  46. _, err = io.Copy(out, bufReader)
  47. return err
  48. }
  49. //转绝对路径
  50. pwd, _ := os.Getwd()
  51. if !filepath.IsAbs(from) {
  52. from = filepath.Join(pwd, from)
  53. }
  54. if !filepath.IsAbs(to) {
  55. to = filepath.Join(pwd, to)
  56. }
  57. //复制
  58. if f.IsDir() {
  59. return filepath.WalkDir(from, func(path string, d fs.DirEntry, err error) error {
  60. if !d.IsDir() {
  61. return fn(path)
  62. } else {
  63. if err = os.MkdirAll(path, 0777); err != nil {
  64. return err
  65. }
  66. }
  67. return err
  68. })
  69. } else {
  70. return fn(from)
  71. }
  72. }
  73. func SearchAndWriteInfConst(fileName, title, content, infoName string) error {
  74. lineBytes, err := ioutil.ReadFile(fileName)
  75. var lines []string
  76. if err != nil {
  77. fmt.Println(err)
  78. } else {
  79. contents := string(lineBytes)
  80. lines = strings.Split(contents, "\n")
  81. }
  82. isHave := false
  83. for _, line := range lines {
  84. isHave = strings.Contains(line, content)
  85. if isHave {
  86. break
  87. }
  88. /* if err != nil {
  89. log.Printf("匹配常量类里的interface报错 :%v", err)
  90. continue
  91. }
  92. if isIn {
  93. isHave = true
  94. }*/
  95. }
  96. var newLines []string
  97. for _, line := range lines {
  98. isIn, err := regexp.MatchString(infoName, line)
  99. if err != nil {
  100. log.Printf("匹配常量类里的interface报错 :%v", err)
  101. continue
  102. }
  103. if isIn && !isHave {
  104. newLines = append(newLines, "\t"+title)
  105. newLines = append(newLines, "\t"+content)
  106. }
  107. newLines = append(newLines, line)
  108. }
  109. file, err := os.OpenFile(fileName, os.O_WRONLY, 0666)
  110. defer file.Close()
  111. _, err = file.WriteString(strings.Join(newLines, "\n"))
  112. if err != nil {
  113. return err
  114. }
  115. return nil
  116. }