// 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
}