go golang 复制整个文件夹 复制整个目录 复制文件
func Copy(from, to string) error {
var err error
f, err := os.Stat(from)
if err != nil {
return err
}
fn := func(fromFile string) error {
//复制文件的路径
rel, err := filepath.Rel(from, fromFile)
if err != nil {
return err
}
toFile := filepath.Join(to, rel)
//创建复制文件目录
if err = os.MkdirAll(filepath.Dir(toFile), 0777); err != nil {
return err
}
//读取源文件
file, err := os.Open(fromFile)
if err != nil {
return err
}
defer file.Close()
bufReader := bufio.NewReader(file)
// 创建复制文件用于保存
out, err := os.Create(toFile)
if err != nil {
return err
}
defer out.Close()
// 然后将文件流和文件流对接起来
_, err = io.Copy(out, bufReader)
return err
}
//转绝对路径
pwd, _ := os.Getwd()
if !filepath.IsAbs(from) {
from = filepath.Join(pwd, from)
}
if !filepath.IsAbs(to) {
to = filepath.Join(pwd, to)
}
//复制
if f.IsDir() {
return filepath.WalkDir(from, func(path string, d fs.DirEntry, err error) error {
if !d.IsDir() {
return fn(path)
} else {
if err = os.MkdirAll(path, 0777); err != nil {
return err
}
}
return err
})
} else {
return fn(from)
}
}