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.

63 lines
1.4 KiB

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