file_operations.go 680 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package utils
  2. import (
  3. "os"
  4. "path/filepath"
  5. )
  6. // FileMove: 文件移动供外部调用
  7. // src: 源位置 绝对路径相对路径都可以
  8. // dst: 目标位置 绝对路径相对路径都可以 dst 必须为文件夹
  9. func FileMove(src string, dst string) (err error) {
  10. if dst == "" {
  11. return nil
  12. }
  13. src, err = filepath.Abs(src)
  14. if err != nil {
  15. return err
  16. }
  17. dst, err = filepath.Abs(dst)
  18. if err != nil {
  19. return err
  20. }
  21. var revoke = false
  22. dir := filepath.Dir(dst)
  23. Redirect:
  24. _, err = os.Stat(dir)
  25. if err != nil {
  26. err = os.MkdirAll(dir, 0755)
  27. if err != nil {
  28. return err
  29. }
  30. if !revoke {
  31. revoke = true
  32. goto Redirect
  33. }
  34. }
  35. return os.Rename(src, dst)
  36. }