go 语言复制整个文件夹

函数包 /lcTools/copy.go

package lcTools

import (
	"io"
	"io/ioutil"
	"os"
	"path/filepath"
)

// 判断某个地址是否为一个文件夹
func IsDir(f os.FileInfo) bool {
	return f.IsDir()
}

// 复制文件
func CopyFile(dstFile string, src string) (bool, string) {
	// 打开源文件
	reader, err := os.Open(src)
	if err == nil {
		defer reader.Close()
		// 创建拷贝文件
		dst, errCopyOpen := os.OpenFile(dstFile, os.O_CREATE|os.O_RDWR, 0777)
		if errCopyOpen == nil {
			defer dst.Close()
			_, errCopy := io.Copy(dst, reader)
			if errCopy == nil {
				return true, ""
			} else {
				return false, errCopy.Error()
			}
		}
		return false, errCopyOpen.Error()
	}
	return false, err.Error()
}

// 核心复制函数
func Copy(dst string, src string) (bool, string) {
	f, err := os.Stat(src)
	if err != nil {
		return false, err.Error()
	}
	// 非文件夹 [ 具体的文件 ] 直接复制
	if !IsDir(f) {
		return CopyFile(dst, src)
	}
	// 文件夹
	// 创建目标文件夹
	os.Mkdir(dst, 0777)
	list, err := ioutil.ReadDir(src)
	if err == nil {
		for _, file := range list {
			Copy(filepath.Join(dst, file.Name()), filepath.Join(src, file.Name()))
		}
	}
	return true, "ok"
}

函数调用

package main
import "lesscode/lcTools"
func main() {
	res, err := lcTools.Copy("./b", "./a")
	println(res, err)
}