复制/剪切文件


// 复制文件 src 需要复制/剪切的文件路径,dst 目标文件夹路径,isCut 是否是剪切
func CopyFile(src, dst string, isCut bool) error {
  var err error
  var srcFd *os.File
  var dstFd *os.File
  var srcInfo os.FileInfo
  if srcFd, err = os.Open(src); err != nil {
    return err
  }
  defer srcFd.Close()
  if dstFd, err = os.Create(dst); err != nil {
    return err
  }
  defer dstFd.Close()
  if _, err = io.Copy(dstFd, srcFd); err != nil {
    return err
  }
  if srcInfo, err = os.Stat(src); err != nil {
    return err
  }
  err = os.Chmod(dst, srcInfo.Mode())
  if err != nil {
    return err
  }
  if isCut {
    _ = srcFd.Close()
    err = os.Remove(src)
  }
  return err
}

复制/剪切文件夹


// 复制文件夹  src 需要复制/剪切的文件夹路径,dst 目标文件夹路径,isCut 是否是剪切
func CopyDir(src string, dst string, isCut bool) error {
  var err error
  src = strings.Replace(src, “\\”, “/”, -1) //源
  dst = strings.Replace(dst, “\\”, “/”, -1) //目标
  var tmp = strings.Split(src, “/”)
  var dirName = tmp[len(tmp)-1]
  isExists, err := PathExists(dst + “/” + dirName)
  if err != nil {
    return err
  }
  dst = dst + “/” + dirName
  if isExists {
    if IsDir(dst) {
      return errors.New(“目标存在同名文件夹”)
    }
  } else {
    err = os.Mkdir(dst, 0777)
    if err != nil {
      return err
    }
  }
  list, err := TPFuncReadDirFiles(src)
  if err != nil {
    return err
  }
  for _, item := range list {
    if IsDir(item) {
      item = strings.Replace(item, “\\”, “/”, -1)
      tmpPath := strings.Replace(item, src, “”, -1)
      if tmpPath == “” {
        continue
      }
      err = os.Mkdir(dst+tmpPath, 0777)
      if err != nil {
        logs.Error(tmpPath)
        return err
      }
    } else {
      item = strings.Replace(item, “\\”, “/”, -1)
      tmpPath := strings.Replace(item, src, “”, -1)
      err = CopyFile(item, dst+tmpPath, false)
      if err != nil {
        return err
      }
    }
  }
  if isCut {
    err = os.RemoveAll(src)
  }
  return err
}

判断文件/文件夹是否存在


// 判断所给路径文件/文件夹是否存在
func PathExists(path string) (bool, error) {
  _, err := os.Stat(path)
  if err == nil {
    return true, nil
  }
  if os.IsNotExist(err) { //如果返回的错误类型使用os.isNotExist()判断为true,说明文件或者文件夹不存在
    return false, nil
  }
  return false, err //如果有错误了,但是不是不存在的错误,所以把这个错误原封不动的返回
}

判断是否为文件夹


//判断路径是否为文件夹
func IsDir(path string) bool {
  s, err := os.Stat(path)
  if err != nil {
    return false
  }
  return s.IsDir()
}
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...