复制/剪切文件
// 复制文件 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()
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
一颗大萝北
本文地址: golang 复制/剪切文件/文件夹,判断文件/文件夹是否存在,判断是否为文件夹
本文地址: golang 复制/剪切文件/文件夹,判断文件/文件夹是否存在,判断是否为文件夹