file_operations.go 682 B

12345678910111213141516171819202122232425262728293031323334353637
  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. Redirect:
  23. _, err = os.Stat(filepath.Dir(dst))
  24. if err != nil {
  25. err = os.MkdirAll(filepath.Dir(dst), 0755)
  26. if err != nil {
  27. return err
  28. }
  29. if !revoke {
  30. revoke = true
  31. goto Redirect
  32. }
  33. }
  34. return os.Rename(src, dst)
  35. }