// 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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通