file.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package tools
  2. import (
  3. "bufio"
  4. "bytes"
  5. "context"
  6. "fmt"
  7. "io"
  8. "io/ioutil"
  9. "log"
  10. "os"
  11. "path/filepath"
  12. "strings"
  13. "time"
  14. )
  15. func PathCreate(dir string) error {
  16. return os.MkdirAll(dir, os.ModePerm)
  17. }
  18. func FileCreate(content bytes.Buffer, name string) {
  19. file, err := os.Create(name)
  20. if err != nil {
  21. log.Println(err)
  22. }
  23. _, err = file.WriteString(content.String())
  24. if err != nil {
  25. log.Println(err)
  26. }
  27. file.Close()
  28. }
  29. type ReplaceHelper struct {
  30. Root string //路径
  31. OldText string //需要替换的文本
  32. NewText string //新的文本
  33. }
  34. func (h *ReplaceHelper) DoWrok() error {
  35. return filepath.Walk(h.Root, h.walkCallback)
  36. }
  37. func (h ReplaceHelper) walkCallback(path string, f os.FileInfo, err error) error {
  38. if err != nil {
  39. return err
  40. }
  41. if f == nil {
  42. return nil
  43. }
  44. if f.IsDir() {
  45. log.Println("DIR:", path)
  46. return nil
  47. }
  48. //文件类型需要进行过滤
  49. buf, err := ioutil.ReadFile(path)
  50. if err != nil {
  51. //err
  52. return err
  53. }
  54. content := string(buf)
  55. log.Printf("h.OldText: %s \n", h.OldText)
  56. log.Printf("h.NewText: %s \n", h.NewText)
  57. //替换
  58. newContent := strings.Replace(content, h.OldText, h.NewText, -1)
  59. //重新写入
  60. ioutil.WriteFile(path, []byte(newContent), 0)
  61. return err
  62. }
  63. func FileMonitoringById(ctx context.Context, filePth string, id string, group string, hookfn func(context.Context, string, string, []byte)) {
  64. f, err := os.Open(filePth)
  65. if err != nil {
  66. log.Fatalln(err)
  67. }
  68. defer f.Close()
  69. rd := bufio.NewReader(f)
  70. f.Seek(0, 2)
  71. for {
  72. if ctx.Err() != nil {
  73. break
  74. }
  75. line, err := rd.ReadBytes('\n')
  76. // 如果是文件末尾不返回
  77. if err == io.EOF {
  78. time.Sleep(500 * time.Millisecond)
  79. continue
  80. } else if err != nil {
  81. log.Fatalln(err)
  82. }
  83. go hookfn(ctx, id, group, line)
  84. }
  85. }
  86. // 获取文件大小
  87. func GetFileSize(filename string) int64 {
  88. var result int64
  89. filepath.Walk(filename, func(path string, f os.FileInfo, err error) error {
  90. result = f.Size()
  91. return nil
  92. })
  93. return result
  94. }
  95. //获取当前路径,比如:E:/abc/data/test
  96. func GetCurrentPath() string {
  97. dir, err := os.Getwd()
  98. if err != nil {
  99. fmt.Println(err)
  100. }
  101. return strings.Replace(dir, "\\", "/", -1)
  102. }