You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.5 KiB

4 years ago
4 years ago
4 years ago
  1. package utils
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. )
  8. // fileMove: 文件移动
  9. // src: 源位置 需要传入绝对路径
  10. // dst: 目标位置 需要传入绝对路径
  11. func fileMove(src string, dst string) error {
  12. if !filepath.IsAbs(dst) && !filepath.IsAbs(src) {
  13. return errors.New(fmt.Sprintf("%s or %s path is not abs", dst, src))
  14. }
  15. return os.Rename(src, dst)
  16. }
  17. // FileMove: 文件移动供外部调用
  18. // src: 源位置 绝对路径相对路径都可以
  19. // dst: 目标位置 绝对路径相对路径都可以 dst 必须为文件夹
  20. func FileMove(src string, dst string) error {
  21. var err error
  22. // 转化为绝对路径
  23. src, err = filepath.Abs(src)
  24. if err != nil {
  25. return err
  26. }
  27. dst, err = filepath.Abs(dst)
  28. if err != nil {
  29. return err
  30. }
  31. // 判断传入的是否是目录
  32. oSrc, err := os.Stat(src)
  33. if err != nil {
  34. return err
  35. }
  36. if oSrc.IsDir() {
  37. return errors.New(fmt.Sprintf("%s is Dir", src))
  38. }
  39. oDst, err := os.Stat(dst)
  40. if err != nil {
  41. return err
  42. }
  43. if !oDst.IsDir() {
  44. return errors.New(fmt.Sprintf("%s is not Dir", dst))
  45. }
  46. //// 遍历指定目录下所有文件
  47. //f, err := ioutil.ReadDir(src)
  48. //for _, file := range f {
  49. // nDst := filepath.Join(dst, file.Name())
  50. // nSrc := filepath.Join(src, file.Name())
  51. // err = fileMove(nSrc, nDst)
  52. // if err != nil {
  53. // return err
  54. // }
  55. //}
  56. err = fileMove(src, filepath.Join(dst, filepath.Base(dst)))
  57. if err != nil {
  58. return err
  59. }
  60. return err
  61. }
  62. // GetAutoPath 根据生成路径生成移动路径
  63. func GetAutoPath(path string) string {
  64. return filepath.Base(filepath.Dir(path))
  65. }