Golang Copy 制整个文件夹或单个文件; //Move 文件

发布时间 2023-06-15 16:35:59作者: tommickey

 


// Copy 制整个文件夹或单个文件
func Copy(from, to string) error {​​​
   f, e := os.Stat(from)
   if e != nil {​​​​​​​​​​
      fmt.Println("没有找到要拷贝的路径:", from)
      return e
   }​​​​​​​​​​
   if f.IsDir() {​​​​​​​​​​
      //from是文件夹,那么定义to也是文件夹
      if list, e := os.ReadDir(from); e == nil {​​​​​​​​​​
         for _, item := range list {​​​​​​​​​​
            if e = Copy(filepath.Join(from, item.Name()), filepath.Join(to, item.Name())); e != nil {​​​​​​​​​​
               return e
            }​​​​​​​​​​
         }​​​​​​​​​​
      }​​​​​​​​​​
   }​​​​​​​​​​ else {​​​​​​​​​​
      //from是文件,那么创建to的文件夹
      p := filepath.Dir(to)
      if _, e = os.Stat(p); e != nil {​​​​​​​​​​
         if e = os.MkdirAll(p, 0777); e != nil {​​​​​​​​​​
            return e
         }​​​​​​​​​​
      }​​​​​​​​​​
      //读取源文件
      file, e := os.Open(from)
      if e != nil {​​​​​​​​​​
         return e
      }​​​​​​​​​​
      defer file.Close()
      bufReader := bufio.NewReader(file)
      // 创建一个文件用于保存
      out, e := os.Create(to)
      if e != nil {​​​​​​​​​​
         return e
      }​​​​​​​​​​
      defer out.Close()
      // 然后将文件流和文件流对接起来
      _, e = io.Copy(out, bufReader)
   }​​​​​​​​​​
   return e
}​​​​​​​​​​

// Move 制整个文件夹或单个文件
func Move(from, to string) error {​​​​​​​​​​
   err := Copy(from, to)
   if err == nil {​​​​​​​​​​
      err1 := os.RemoveAll(from)
      if err1 != nil {​​​​​​​​​​
         fmt.Println("复制完成,删除失败")
         return err1
      }​​​​​​​​​​ else {​​​​​​​​​​
         fmt.Println("@OK移动成功:", from, " => ", to)
      }​​​​​​​​​​
   }​​​​​​​​​​ else {​​​​​​​​​​
      fmt.Println("*Error移动失败:", from, " => ", to)
   }​​​​​​​​​​

   return err
}​​​​​​​​​​